• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

微信小程序支付

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

转载:https://blog.csdn.net/zhourenfei17/article/details/77765585

支付流程步骤:

1)首先调用wx.login方法获取code,通过code获取openid;

2)java后台调用统一下单支付接口(这里会进行第一次签名),用来获取prepay_id;

3)java后台再次调用签名(这里会进行第二次签名),并返回支付需要用使用的参数;

4)小程序前端wx.requestPayment方法发起微信支付;

5)java后台接收来自微信服务器的通知并处理结果。

详细步骤可参考:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=3

demo链接: https://pan.baidu.com/s/1v8QWUE1m2EnA4uAoAZtRRQ 密码: cgrt

调试过程中遇到的几个问题 1 nonceStr 和 tradeNo 一定要保持一致 2 在回调的时候出现调用支付jsapi缺少参数 total_fee response.put("package", "prepay_id="+prepay_id);这个地方传参要注意 这个total_fee 缺失的原因 结合上面 的package:"prepay_id=wx201612032137135b201de80e0666789657" 其实是每个订单号只能用于支付一次 ,如果没有支付成功,那么可以再次支付,如果支付成功了,就不能支付了,,如果出现了tital_fee,只需要更改成另外一个订单号再进行支付 就行了 3 在回调的时候签名失败 这个是个大坑,一定要注意,在下订单的时候我们会生成一次签名,这个地方的参数传的都是小写appid,....., //组装参数,用户生成统一下单接口的签名 Map packageParams = new HashMap(); packageParams.put("appid", WxPayConfig.APP_ID); packageParams.put("mch_id", WxPayConfig.MCH_ID); packageParams.put("nonce_str",nonceStr); packageParams.put("body", params.getString("body")); packageParams.put("out_trade_no", tradeNo);//商户订单号 packageParams.put("total_fee", totalPrice.setScale(0,BigDecimal.ROUND_DOWN).toString());//支付金额(),这边需要转成字符串类型,否则后面的签名会失败 packageParams.put("spbill_create_ip", WxUtils.getIpAddr()); packageParams.put("notify_url", WxPayConfig.NOTIFY_URL);//支付成功后的回调地址 packageParams.put("trade_type", WxPayConfig.TRADE_TYPE);//支付方式 packageParams.put("openid", openId); packageParams.put("fee_type",WxPayConfig.FEE_TYPE); System.out.println("package:"+packageParams); String sign = WXPayUtil.generateSignature(packageParams, WxPayConfig.KEY); //签名 packageParams.put("sign",sign); /** wxPay.unifiedOrder 这个方法中调用微信统一下单接口 */ Map respData = wxpay.unifiedOrder(packageParams); 往前台传参数的时候,我们需要重新生成一次签名,这个地方就变成大写了,一定要注意 //返回给APP端的参数,APP端再调起支付接口 Map response = new HashMap<>(); String prepay_id = respData.get("prepay_id"); response.put("appId", WxPayConfig.APP_ID); response.put("package", "prepay_id="+prepay_id); response.put("nonceStr", respData.get("nonce_str")); response.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000)); response.put("signType", "MD5"); String s = WXPayUtil.generateSignature(response, WxPayConfig.KEY); //签名 response.put("sign", s); System.out.println("response++++++:"+response);,>,>,>,>

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap