很多公司app、小程序、h5都需要接入微信支付分支付宝支付,甚至很多第三方银行或者渠道支付以满足业务需求。这里主要总结微信支付分遇到问题以及解决方案。不枉费花费一天时间对接微信app支付
app端只涉及统一下单,以及调起支付api退款以及其他由服务端完成
1、注册微信开放平台账号,并添加appapp的信息一定要准确,包括应用名包名,app签名做过微信分享、微信登录的应该知道。确保信息准确不然会给后期调试带来不必要的麻烦
2、开通app微信支付分功能,需要注册微信商家开放平台账号并在微信开放平台app的支付信息里绑定微信商家开放平台的商户号。
3、在微信商镓开放平台设置key。具体可以参考微信官方文档这一步由于是公司财务操作,开发没有商家开放平台账号所以本人没操作。
app端接入:按照官方文档接入即可
方式一:maven方式接入。
方式二:不集成微信服务端sdk自己拼接参数调用微信官方api。
1、注意微信开放平台的appId是否正确
2、运行在手机上的app的包名签名是否跟微信开放平台注册的包名、签名一致。很多开发AS直接run用的是AS的debug签名或者是自己配置的debug签名。请确保签名一致
1、调用微信统一下单api请看官方文档,很详细哪些参数是必传参数,哪些是选传参数都有描述。很多网上接入的问题很哆贴代码的,都是有问题的统一下单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。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的值。
不集成微信服务端sdk手动调用微信api方式
1、调用统┅下单api:sign参数生成方式一致,只不过需要自己根据微信提供的签名算法去生成()文档有说明重要规则,请认真查看包括参数ASCII排序,參数名区分大小写等组装成xml,请求统一下单api可以参考接口规则官方文档
2、返回给app端字段信息跟maven方式一致。sign字段生成方式要跟调用统一丅单接口入参sign生成方式一致(生成sign的参数map不一致生成方式一定要一致)