微信支付全部详细流程
来源:互联网 发布:海贼无双3数据地址 编辑:程序博客网 时间:2024/05/22 05:26
微信文档太垃圾 先吐槽一下 搞了我三天
因为后台没有完成 所以我在APP的代码里面实现从统一下单 到生成支付订单 然后调用支付的全部过程
我从流程开始讲解
第一步 通过微信支付申请支付的金额是通过统一下单形成的,不是直接赋值的这里需要这些参数 参考文档:
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
里面只要是必须传的值都必须填上。
关于签名sign的问题,这是第一次签名 需要把之前所配置的所有参数(除了sign属性)形成一个统一的字符串按照https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3这里的算法生成。(这里面有个ASCII码从小到大排序{因为数据不多,不会写算法就直接自己计算,就是把参数的名称的第一个字母按照(abcd……)的循序排列,如果第一个字母相同,就比较第一个字母相同的名称里面的第二个字母})由此排序生成的字符串与key(其值是API密匙)一起经过MD5加密(这里必须用UTF-8格式的加密字符串)
第一步还没完 这个sign算好之后 通过post方式发送微信接口https://api.mch.weixin.qq.com/pay/unifiedorder,应该会返回一个XML格式数据 解析之后会获得许多数据,甚至有sign,但是这些全部都不需要,只需要prepayid这个属性就行了,但我通过测试几次发现返回的数据中,除了sign不能用之外,其他的都能用
第二步 再次向微信发送数据 不过这次是调用支付所需要的参数,这些参数在https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_12&index=2里面,都是必须填的,之前获得了prepayid,然后新属性package是固定值,其他的值(除了sign之外)可以在第一步所需要的参数获取到。 这里最重要的是生成sign属性了,它的生成与第一步的方法差不多,只是参数是调用支付API上面的参数。还是要注意ASCII码从小到大排序(最好手动配置)。到这里 如果你是后台,你就把这些数据形成JSON数据发给手机端。如果是APP直接获取,那么可用 PayReq req = new PayReq();
给 req.appId=申请的APPiD;
req.partnerId=商户号;
req.prepayId=第一次返回的prepayid;
req.nonceStr=32位随机数;
req.timeStamp=时间截;
req.packageValue="Sign=WXPay";固定值
req.sign=sign1(这个值要么是后台获得,要么是第二次生成的签名);
req.extData= "app data";这一句不知道有什么用,但是不调用会导致-1;
最后一步
APP里要调用 api.sendReq(req);(如果之前有分享,要确定分享包里面有支付功能不然不能调出微信支付界面)
微信demo里面只能使用一次,要想多次使用必须清楚微信缓存(要重新登录很麻烦)
没有demo(代码直接写项目里面了)
有个post传参数案例http://download.csdn.net/detail/baidu_34413390/9591010
- 微信支付全部详细流程
- java微信支付接入详细流程
- 微信支付流程
- 微信支付流程
- 微信支付流程
- 微信支付流程
- 微信支付流程
- 微信支付流程
- 微信 支付流程
- 微信支付流程
- 微信支付流程
- java微信支付接入详细流程 亲测
- Android中支付宝,微信植入的详细流程
- 最新版的微信支付全部流程(2017/7/24) php开发的
- 微信支付流程(IOS)
- 微信支付开发流程
- 微信支付基本流程
- 微信支付开发流程
- display:none和visibility:none的区别
- 8天学通MongoDB——第四天 索引操作
- 欢迎使用CSDN-markdown编辑器
- 8天学通MongoDB——第五天 主从复制
- IB_DESIGNABLE和IBInspectable应用
- 微信支付全部详细流程
- Struts2学习之旅(6)
- 8天学通MongoDB——第六天 分片技术
- 什么场景下将MySQL替换为HBase
- (模板题)poj 3041 Asteroids(二分图的最大匹配匈牙利算法)
- 用户和组
- link和import的区别
- 8天学通MongoDB——第七天 运维技术
- 旋转菜单按钮