美文网首页
Android微信支付sdk对接问题总结

Android微信支付sdk对接问题总结

作者: 愤怒的五百万 | 来源:发表于2019-10-29 10:48 被阅读0次

背景

很多公司app、小程序、h5都需要接入微信支付,支付宝支付,甚至很多第三方银行或者渠道支付,以满足业务需求。这里主要总结微信支付遇到问题,以及解决方案。不枉费花费一天时间对接微信app支付。

微信资源

app端只涉及统一下单,以及调起支付api。退款以及其他由服务端完成
文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
demo下载:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1
api列表:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

前期准备

1、注册微信开放平台账号,并添加app。app的信息一定要准确,包括应用名,包名,app签名,做过微信分享、微信登录的应该知道。确保信息准确,不然会给后期调试带来不必要的麻烦
2、开通app微信支付功能,需要注册微信商家开放平台账号,并在微信开放平台app的支付信息里绑定微信商家开放平台的商户号。
3、在微信商家开放平台,设置key。具体可以参考微信官方文档。这一步由于是公司财务操作,开发没有商家开放平台账号,所以本人没操作。

开始接入

app端接入:按照官方文档接入即可。

服务端:

方式一:maven方式接入。
方式二:不集成微信服务端sdk,自己拼接参数调用微信官方api。

调试问题

app端问题:

1、注意微信开放平台的appId是否正确
2、运行在手机上的app的包名,签名是否跟微信开放平台注册的包名、签名一致。很多开发AS直接run,用的是AS的debug签名或者是自己配置的debug签名。请确保签名一致

服务端问题:

maven方式

1、调用微信统一下单api,请看官方文档,很详细,哪些参数是必传参数,哪些是选传参数都有描述。https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1。很多网上接入的问题,很多贴代码的,都是有问题的,统一下单api入参都少了sign这个必传参数。当然这个sign参数有什么作用呢,很多人只知道要传,传什么值,但是微信是怎么通过sign字段进行校验的呢,仔细想想。sign是微信用来验证的,是参数map生成的,是为了防止篡改参数map的key和value。个人猜测,微信服务api和微信APP sdk接受到sign后,会根据sign的生成规则,反向推算出参数map的key value,如果推算出来的key 大小写不一致,名字不一致,value的值不对,都会返回失败,包括app端调用微信sdk,也会失败。
2、统一下单api入参sign,一定是要传的。sign怎么生成的呢,微信服务端有提供方法去生成(WXPayUtil.generateSignature),重点是统一下单其他参数map组装好,将map、商家开放平台的key(不是商家开放平台的商户id),当入参传入微信服务端sdk的方法(WXPayUtil.generateSignature)即可得到sign的值,默认是md5方式。再把sign参数添加到总的map参数,调用统一下单wxpay.unifiedOrder。
3、统一下单接口会返回一些支付信息,需要服务端回传给app客户端。此时要注意,统一下单接口会返回sign字段,这个字段是没有用的,千万不要用,千万不要用,千万不要用,如果你把这个返回的sign给了客户端,那你等着被客户端吊打吧。sign需要重新生成,生成方式跟第一步调用统一下单api生成方式一致,只不过参数map变成了调起支付接口api的参数map,https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_12&index=2。appid、partnerid、prepayid、package、noncestr、timestamp这6个字段,map的key一定要注意大小写,请跟这6个字段保持一致,value就是具体的值。package的值如果app端写死了Sign=WXPay,那么服务端package的值也需要一致为Sign=WXPay,如果app端没有写死,则服务端可以自定义,app端调起微信支付sdk时需要用服务端返回的package值。调用WXPayUtil.generateSignature,传入以上拼装的参数map,商家的key即可得到sign的值。
4、appid、partnerid、prepayid、package、noncestr、timestamp、sign7个参数返回给app端使用。如果前面步骤没问题,这一步会很顺畅。app端用服务端返回的字段,直接可调起支付。

不集成微信服务端sdk,手动调用微信api方式

1、调用统一下单api:sign参数生成方式一致,只不过需要自己根据微信提供的签名算法去生成(https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3)。文档有说明重要规则,请认真查看,包括参数ASCII排序,参数名区分大小写等。组装成xml,请求统一下单api。可以参考接口规则官方文档https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3#
2、返回给app端字段信息跟maven方式一致。sign字段生成方式要跟调用统一下单接口入参sign生成方式一致(生成sign的参数map不一致,生成方式一定要一致)

相关文章

  • Android微信支付sdk对接问题总结

    背景 很多公司app、小程序、h5都需要接入微信支付,支付宝支付,甚至很多第三方银行或者渠道支付,以满足业务需求。...

  • android集成微信、支付宝、银联sdk

    微信支付sdk 支付宝支付sdk 银联支付sdk

  • Android对接微信支付

    这几天给app对接了微信支付,官方的demo真是。。。第一次果然不免爬几个坑,记录一下,避免遗忘。 错误说明 在保...

  • Android11 微信支付&支付宝支付SDK适配

    问题描述 微信支付和支付宝支付SDK在Android11的手机上无法获取到对应APP的包名,从而判断本机未安装对应...

  • iOS微信支付简单的使用

    APP微信商户申请APPID步骤地址 微信支付 SDK与 Demo地址下载 把微信支付 SDK 拖到工程上SDK ...

  • 支付

    android微信支付问题总结 - CSDN博客 Android中定时器的3种实现方法 - CSDN博客 Andr...

  • 记一次支付宝对接

    一、场景 微信公众号要支付宝支付,采用支付宝手机网站支付的方式。对接使用支付宝最新sdk,向前端输出form表单。...

  • 微信青蛙刷脸支付——Android

    微信青蛙刷脸支付——Android 使用设备: 天之河刷脸设备(开放版) 基础配置 需要用到 微信刷脸支付 SDK...

  • android 微信支付问题总结

    首先吐槽一下微信支付,虽然不知道为啥非要这么设计回调,但是ios sdk上都能用block回调,安卓上非的跳转到这...

  • tp5 微信支付sdk

    接触到微信支付,然而微信官方给出的微信支付sdk用起来不太方便,在原来微信支付sdk上进行了修改,测试过能用,现在...

网友评论

      本文标题:Android微信支付sdk对接问题总结

      本文链接:https://www.haomeiwen.com/subject/eoewvctx.html