您的位置:首页 > 移动开发

微信App支付总结(返回-1什么的最e心)

2016-06-27 17:17 531 查看

微信支付总结

简介

微信支付商户平台官网:https://pay.weixin.qq.com

版权声明:本文为原创文章,未经允许不得转载

更新时间:2016/6/27

本文说明

现在很多项目都会集成微信登陆授权、微信公众号授权或者微信支付,然而当我们根据微信的开发文档进行开发的时候会发现,一个又一个的坑,
尤其是微信支付,demo还是eclipse的,令人捉急。本文仅仅简单介绍一下在公司开发时集成微信APP支付的流程,以及开发中的几个坑。


开发流程

让产品经理去微信开放平台注册应用,获取AppID、AppSecret,并申请开通微信支付功能。如果开通成功,微信会分配给你的公司一个商户号, 作为支付的账户。

注意:微信开放平台注册app的时候,需要提供应用的包名和签名,其中应用的签名可以根据微信的开发文档中的方法(https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5)来获取;整个申请过程需要资质认证等,十分麻烦,大概需要3-5天左右,所以需要提醒产品经理提前申请,当然,如果人家是个资深产品,就不要废话了。

根据微信支付的文档进行开发,首先引入微信的jar包libammsdk.jar

开始写代码,首先注册APPID,调起自己家的服务器,让服务器去调用统一下单的API生成预支付订单,获取到prepay_id.



该方法用于判断手机端是否安装微信,以及微信版本是否支持支付功能。



该方法就是向自己的服务器发送请求,让它去获取prepay_id,然后返回给app端。



调起微信客户端:实现PayReq类,封装参数,然后调起微信客户端。此段代码,直接复制自微信的demo,稍加改动。



注意:服务端调用微信的统一下单的api之后,统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay。

支付结果回调

参照微信SDK Sample,在包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调),在WXPayEntryActivity类中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。





0 成功 展示成功页面

-1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。

-2 用户取消 无需处理。发生场景:用户不支付了,点击取消,返回APP。

微信明确提出,不能以客户端返回的数据为准,必须主动向自己的服务器查询支付结果,然后服务器去向微信的服务器查询订单的支付结果,然后展示在自己的界面上。所以,微信需要自己的应用中有一个展示支付结果的界面,这一点和支付宝不一样,因为支付宝返回的结果直接就可以作为最终的订单结果。

查询的代码就不贴出来了,有可能是自己将prepay_id传递给服务器,然后服务器去查询,返回过来一堆订单的数据,选择一部分展示到界面上即可。展示样例:



(自己家的不能给,贴个别人家的,这个是产品和UI做)

Hole坑

在保证流程正确的前提下,给大家介绍几种常见问题
1. 在成功注册了正确的APPID的前提下,如果回调结果返回-1,你的第一反应应该是什么,是签名错误!!!请让服务端核对签名,当然对调其
微信客户端的参数签名应该放在服务端去做,即安全又合理,我们app端仅仅是做了传递参数。但是希望大家都了解这个签名过程,我所接触过的
很多收银的签名算法都是这个过程:排序->拼接key->MD5加密。
2. 由于调其微信支付的时候需要将APPID注册到微信客户端中,并且将订单数据传给微信,所以在未调试成功之前如果返回结果-1,那么下次调试
的时候需要清空微信客户端的数据,这个也很重要。(设置-应用-微信-清空数据)
3. 在调试微信的时候,要求必须使用正式的签名文件keystore,但是我们studio直接运行,使用的是默认的签名文件,所以有两种选择:
每次调试都要生成apk安装;或者在gradle里写下这句话,并将keystore放在app目录下:




比如,如果签名名称为wall.keystore,那么就会到app目录下找这个文件。

一定注意,在上线的时候要删除掉这个签名文件,并且注释掉这段话!

In the end

如果发现问题,欢迎留言或者发邮件到815852777@qq.com,感激不尽。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: