微信支付之二维码支付(native)
准备材料微信支付需要的参数统一下单二维码回调接口用到的工具类
. 准备材料#
首先肯定是要有微信的开发文档
开发文档地址
再然后就是一些必的参数
注意:回调地址异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。
再然后就是微信的SDK
. 微信支付需要的参数#
上面的开发文档你肯定看熟了吧,流程肯定会了吧,代码怎么写呢?先来看看需要哪些参数吧.
好了知道流程了知道需要哪些参数了那咱们动手吧!
. 统一下单#
首页你得有统一下单是url:https://api.mch.weixin.qq.com/pay/unifiedorder
Copy
1@Controller
2@RequestMapping("/wxpay")
3public class WXpayController {
4 @Autowired
5 private PayOrderService payOrderService;
6
7 /**
8 * 微信二维码支付
9 */
10 @RequestMapping(value = "/nativePay")
11 public Map<String, String> createQRCode(HttpServletRequest request, HttpServletResponse response, String orderid) {
12 PayOrderDO payOrderDO = this.payOrderService.getOder(orderid);//订单信息
13 //生成订单对象
14 Map<String, String> request_data = new HashMap<>();
15 try {
16 Map<String, String> data = new HashMap<String, String>();
17 data.put("appid", WxConstants.APP_ID);//公众账号ID
18 data.put("mch_id",WxConstants.PARTNER);//商户号
19 data.put("body", "测试");//商品详情
20 data.put("out_trade_no",orderid);//订单号
21 data.put("nonce_str", UuidUtil.get32UUID());//32位字符串
22 //转换微信中存在最小计算单位是分的问题
23 BigDecimal payMoney = payOrderDO.getPayMoney();
24 BigDecimal bigDecimal = new BigDecimal(100);
25 BigDecimal amount = payMoney.multiply(bigDecimal).setScale(0, BigDecimal.ROUND_DOWN);
26 data.put("total_fee", String.valueOf(amount));//总金额
27 data.put("spbill_create_ip", IPUtils.getIpAddr(request));//用户终端IP
28 data.put("trade_type", "NATIVE"); // H5支付的交易类型为MWEB
29 data.put("notify_url", WxConstants.NOTIFY_URL);//通知地址
30 data.put("product_id",orderid );
31 String sign = createSign(data, WxConstants.PARTNER_KEY, WxConstants.CHARSET);
32 //调用生成签名的方法,用以Map集合中的相关参数生成签名 需要签名密钥
33 data.put("sign", sign);//签名
34 String xml = WXPayUtil.generateSignedXml(data, WxConstants.PARTNER_KEY);//转Xml格式 微信SDK自带的
35
36 System.out.println("request - XML:" + xml);
37
38 String resultXML = HttpsClientUtil.doPost(WxConstants.BAUSE_URL, xml);//发送post请求 返回的是微信给我们的xml格式的数据
39
40 System.out.println("result - XML:" + resultXML);