Java对接微信APP支付,JSAPI支付,H5支付踩过的坑

    近几年做过很多商城类项目,对接过很多类型的支付方式,其中包括微信的三种(APP支付,JSAPI支付,H5支付),和支付宝等。此片文章就来说一下在对接微信各种支付的时候踩过的坑。

 1、APP支付

    1、后台

      至于导入微信官方依赖包以及使用工具类在这就不一一介绍了,我们直接上最核心的部分,代码如下:

方法中的参数WxAppPayConfig其中主要是商户的信息(可以登录微信商户平台获取),代码如下:

参数WxAppPayData是自己业务封装的参数,主要是订单的相关信息,此处不做展出。

方法中的请求参数按照微信开发文档封装链接https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1,请仔细阅读。

map转xml方法:

验签方法:

String respXml = template.postForObject(WechatReqUrl.unifiedorderUrl(), xml, String.class);中WechatReqUrl.unifiedorderUrl()为appz支付统一下单地址:https://api.mch.weixin.qq.com/pay/unifiedorder
processResponseXml方法:

返回结果return_code 和result_code都为SUCCESS的时候才算成功,此时要注意此种支付方式需要在成功之后二次验签,之前第一次对接此支付方式的时候,网上很多资料都没有明确说明需要二次验签(包括官方文档)二次验签的时候需要重新组装参数,代码如第一张图中所示,需要注意的是map中的key必须严格按照图片中的写法去写,区分大小写,否则会验签失。验签通过后再次组装数据,此时返回的签名数据必须是第二次验签的结果,

respMap.put("package", "Sign=WXPay");"package"的value值必须写成"Sign=WXPay",有的网上资料直接写成"WXPay",这回导致手机端无法拉起微信支付。然后把参数返回前端,至此Java后端结束。

     2、前台

     APP端调起支付的参数列表请参考官方文档https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_12&index=2,参数名严格按照官方文档写。

3、回调

后调后需要再次验证,因为牵扯到金钱所以要格外小心,在验证通过后就可以做自己的业务(更改订单状态等),但是此时需要把结果转成(

<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>或
<xml><return_code><![CDATA[FAIL]]></return_code><return_msg></return_msg></xml>

)这种方式返回给微信端(return_code的值“SUCCESS或“FAIL”必须大写),告诉它是否成功,否则微信会以15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h - 总计 24h4m的方式进行不停的回调,直至超时或者收到返回结果为止。

 2、JSAPI支付

    1、后台

    这种支付方式所用的方法和app差不多,可参考第一张图中代码,区别在于app支付的appid是(微信开放平台审核通过的应用APPID(请登录open.weixin.qq.com查看,注意与公众号的APPID不同))jsapi支付的appid是公众号id,可以登录微信公众平台获取,商户号可以共用,但是需要在公众平台绑定同一个商户号。另一个区别是交易类型(trade_type),还有就是此种支付方式必须要传openid(这点很容易忽略),openid的获取方式请参考官方文档https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1,此处也不做过多介绍。最容易出错的地方还是组装数据二次验签的时候,和第一张图中的区别代码如下:

区别在于组装数据map中的key不一样(二次验签的key名这几中支付方式各有不同,让很多人都掉进了这个坑里),请参考此图中的key名和数据进行组装,否则可能导致失败。

2、回调

   参考app支付回调

3、前端

    请参考https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6,上面有官方demo。

3、H5支付

    此种支付方式可以说和jsapi基本相同,不同点在”交易类型“和不需要传“openid”,但是多了一个“场景信息”必传字段。二次验签传入的参数也都相同,但是返回的数据不同,h5支付最后成功后会返回“支付跳转链接mweb_url”,此链接会返回前端直接调用。

4、总结

    经过这几种支付方式的对接大致发现一点规律,如果后台返回参数后,需要前端再次组装数据拉起支付(如app支付,jsapi支付)的,在后台二次验签的时候,如果前端需要什么数据拉起支付,二次验签时必须要传入进行验签,参数名也要相同,不然即使后台验签成功,返回给前台,前台拉起支付时也会报错。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值