微信扫码支付Demo(java)


第一步

要扫码,必须要先有码。生成二维码demo

String url = "weixin://wxpay/bizpayurl?sign="+er.getSign()+"&appid="+er.getAppid()+
			"&mch_id="+er.getMch_id()+"&product_id="+er.getProduct_id()+"&time_stamp="+er.getTime_stamp()+"&nonce_str="+er.getNonce_str();

我相信以上几个参数,看过API的应该都清楚。这样就生成了二维码


第二步

设置扫码后微信通知你的URL




第三步

创建编写回调URL servlet

package com.yuwei.nativepay.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import com.yuwei.nativepay.main.UnifiedOrderBean;
import com.yuwei.nativepay.sign.Signature;
import com.yuwei.nativepay.sign.XMLParser;
import com.yuwei.nativepay.util.Configure;
import com.yuwei.nativepay.util.HttpRequest;
import com.yuwei.nativepay.util.RequestUtil;
import com.yuwei.nativepay.util.Util;

public class NativeCallBackServlet extends HttpServlet{

	/**
	 * 
	 */
	private static final long serialVersionUID = 3358943773018523786L;

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		
		PrintWriter pw = resp.getWriter();
		String retStr = new String(Util.readInput(req.getInputStream()),"utf-8");
		
		//扫码返回XML demo
//		<xml><appid><![CDATA[wxe9fa16c146eXXXXX]]></appid>
//		<openid><![CDATA[oAjrAjrw81UZuAlM3F_03tmxeSG4]]></openid>
//		<mch_id><![CDATA[1269011111]]></mch_id>
//		<is_subscribe><![CDATA[Y]]></is_subscribe>
//		<nonce_str><![CDATA[KwRqjXOW7k0wOZvL]]></nonce_str>
//		<product_id><![CDATA[8888]]></product_id>
//		<sign><![CDATA[41F26B7F22C8625060ABC299EEA754D7]]></sign>
//		</xml>
		
		
		
		try {
			Map<String, Object> map = XMLParser.getMapFromXML(retStr);
			
			//outTradeNo 订单号
			UnifiedOrderBean order = new UnifiedOrderBean(map.get("appid").toString(), map.get("mch_id").toString(), "测试1", RequestUtil.getRandomStringByLength(32), 
					null, "Ipad mini  16G  白色", "Ipad mini  16G  白色", "java demo", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()), "CNY",
					1, "122.224.40.204", new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()), new SimpleDateFormat("yyyyMMddHHmmss").format(new Date(new Date().getTime()+1800000)), 
					"WXG", "http://????/wx_nativepay/native", "NATIVE", map.get("product_id").toString(), "no_credit", map.get("openid").toString());
			
			
			order.setSign(Signature.getSign(order));

			HttpRequest http = new HttpRequest();
			String retOrder = http.sendPost("https://api.mch.weixin.qq.com/pay/unifiedorder", order);
			
			//同意订单接口返回demo
//			<xml><return_code><![CDATA[SUCCESS]]></return_code>
//			<return_msg><![CDATA[OK]]></return_msg>
//			<appid><![CDATA[wxe9fa16c146eXXXXX]]></appid>
//			<mch_id><![CDATA[1269011111]]></mch_id>
//			<device_info><![CDATA[测试1]]></device_info>
//			<nonce_str><![CDATA[DwEgTeCXHq3z8VRX]]></nonce_str>
//			<sign><![CDATA[68F3113F0E246EED9CAA49E93ACAC79E]]></sign>
//			<result_code><![CDATA[SUCCESS]]></result_code>
//			<prepay_id><![CDATA[wx20160319131705668cacb34b0717748054]]></prepay_id>
//			<trade_type><![CDATA[NATIVE]]></trade_type>
//			<code_url><![CDATA[weixin://wxpay/bizpayurl?pr=mt8vqLq]]></code_url>此处的code_url模式二里面可以直接展示给用户进行扫码支付,有效期2小时
//			</xml>
			
			Map<String, Object> mapOrder = XMLParser.getMapFromXML(retOrder);
			
			
			//返回return xml
			Map<String, Object> retNative = new HashMap<String, Object>();
			retNative.put("return_code", mapOrder.get("return_code"));
			retNative.put("return_msg", mapOrder.get("return_msg"));
			retNative.put("appid", mapOrder.get("appid"));
			retNative.put("mch_id", mapOrder.get("mch_id"));
			retNative.put("nonce_str", mapOrder.get("nonce_str"));
			retNative.put("prepay_id", mapOrder.get("prepay_id"));
			retNative.put("result_code", mapOrder.get("result_code"));
			retNative.put("sign", Signature.getSign(retNative));
			
			
			pw.print(XMLParser.getXMLFromMap(retNative));
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			pw.flush();
			pw.close();
		}
		
		
	}
	
	
}


一切OK,到此结束



  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PHP微信扫码支付Demo是一个用PHP语言编写的示例程序,用于演示如何使用微信支付扫码支付功能。 首先,我们需要在微信商户平台注册一个商户号,并获取到支付相关的参数,包括APPID、商户号、密钥等等。 然后,我们需要搭建一个简单的PHP后台服务器,用于处理支付请求和回调。我们可以使用框架如Laravel或使用原生PHP来实现。 接下来,我们需要创建一个简单的页面,提供给用户进行支付。页面上需要包含一个二维码来展示支付链接。 在PHP代码中,我们需要首先获取到用户在前端输入的支付金额和订单号等信息。然后,通过调用微信支付接口的方式,生成一个微信支付的二维码链接。我们可以使用PHP内置的cURL库来发送请求,并获取到返回的结果。 接下来,我们将支付链接生成的二维码显示在前端页面上,供用户进行扫码支付。我们可以使用一些开源的PHP二维码生成库来生成二维码图片。 当用户扫码支付后,微信服务器会回调我们之前在后台配置的回调URL。我们需要编写相应的代码来处理这个回调请求,并验证回调的合法性。在回调处理中,我们需要根据微信服务器返回的支付结果更新订单状态或进行其他业务逻辑的处理。 最后,我们可以在前端页面上添加一些样式和交互效果,例如显示支付成功或失败的提示信息,并提供订单查询的功能。 通过以上步骤,我们就可以实现一个简单的PHP微信扫码支付Demo。当然,这只是个简单的示例,实际应用中还需要考虑更多的安全性和异常处理等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值