浅谈安卓微信支付遇到的那些坑(服务端签名)

**

浅谈安卓微信支付遇到的那些坑(服务端签名)

**
做微信支付首先需要到微信开放平台https://open.weixin.qq.com注册自己的APP。
1,如果是创建移动应用就点击创建移动应用,然后安照提示的填写资料。
2,第一页填写完毕后,会跳到填写平台信息页面,(这里会遇到第一个坑,我表示没有遇到)这里有个填写应用签名,注意了,如果项目是在测试阶段,这里填写你的debug.keystore的签名,如果不填写这个到时候测试的时候很麻烦,记得这里填写测试的签名。
3,申请通过后腾讯会给一个AppID,和AppSecret,拿到这个东西之后就可以进行微信支付API的集成了。
4,下面坑来了, 集成微信支付很简单,但是难得地方是文档写的不够清晰,总是会让人掉到坑里面去, 集成微信支付首先到微信开放下载微信支付的DEMOhttps://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1,下载完之后就可以正式移植微信支付API了,这里写图片描述 而真正有用的只有这里写图片描述
5,调用微信支付API ,调用微信支付首先要将自己的APP注册到微信 ,即要调用`

    final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
    // 将该app注册到微信
    msgApi.registerApp(Constants.APP_ID);`

然后创建IWXAPI对象,

        IWXAPI api = WXAPIFactory.createWXAPI(this, "wxb4ba3c02aa476ea1");

然后调用微信创建支付订单方法

PayReq req = new PayReq();
                            //req.appId = "wxf8b4f85f3a794e77";  // 测试用appId
                            req.appId= "appid";
                            req.partnerId= "partnerid";
                            req.prepayId= json.getString("prepayid");
                            req.nonceStr= json.getString("noncestr");
                            req.timeStamp= json.getString("timestamp");
                            req.packageValue= json.getString("package");
                            req.sign= json.getString("sign");
                            req.extData= "app data"; // optional

                            // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
                            api.sendReq(req);

注意:以上参数是通过服务器签名后传递过来的,
6.将如下目录的包拷至自己项目的主目录下面
这里写图片描述
,即 配置文件的package里面的那个目录,这个是重点,而且这个包的名字也不可以改变,必须是wxapi,否则是无法接收到微信支付状态的回调的,调试起来非常的麻烦, 这里面的两个文件WXPayEntryActivity.java是支付状态的回调文件,一定要记住,wxapi包必须是要放在项目的主目录里面,至此微信支付的客户端已经集成完毕。

7.服务端的一个,
(注意服务端会有一个坑),当服务端签名后传递到本地APP后如果无法调起微信支付页面,而且一直返回-1的话,那么看服务端时候拿到了微信给的签名,服务端传过来的参数是否有空值,并且要拿微信的在线参数测试工具测试一下参数是否配置正确,如果正确依然无法支付返回-1的话那么就是服务端没有进行二次签名了,当服务端在第一次向微信请求签名的时候,微信返回的签名值并不是传递给安卓端的签名,服务端拿到签名后要将这个签名拿到第一次向微信签名的参数进行二次签名后传递给安卓端,这才是正确的签名,需要二次签名,至此微信支付完成。

如果调用微信支付并且签名正确依然没有反应的话那么首先检查wxapi的包是否放在项目的主目录下面, 然后检查服务端是否进行二次签名,

还有一个坑,当服务端进行第一次签名时会向微信传递一个BODY参数,这个参数一旦生成签名成功,当支付失败再次进行支付时不可以改变BODY的内容,因为这个正文是不可以改变的,

这就是我做微信遇到的坑,希望对大家有帮助,第一次写文章,写的不好请大家谅解,如果遇到问题可以加我的QQ:847874028 帮助解答,谢谢!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值