微信支付总结

微信支付总结

前言

支付方式中,目前使用最多的是支付宝、微信、银联,几乎是每个app的标配(淘宝、京东除外)。
做过支付的都知道,同样是支付接入,微信比支付宝要繁琐的多,坑比较深。这篇文章是为了帮助即将入坑的童鞋们尽早脱坑准备的。吐槽的话不多说,接下来请看微信支付接入流程。


  • 1. 申请微信开放平台微信支付能力
    开放平台官网:https://open.weixin.qq.com/
    进入官网,创建应用,获得微信支付能力,如下图所示:

这里写图片描述

填写完成后进入“管理中心”打开你创建的应用开发信息,填写相关信息。Ios和android如果都需要接入相关信息都要填写完,应用的签名需要下载微信提供的签名工具,其实就是安装一个apk,打开这个apk,输入你的应用包名就可以得到签名了。接下来就是获取微信支付能力,如下图:

这里写图片描述

微信支付能力需要单独申请,如果你的应用没有申请过微信支付,在“微信支付”那一栏,接口状态应该是“未获得”,操作栏目应该是“申请开通”。接下来点击“申请开通”,进入如下图所示:

这里写图片描述

申请分三步:资料审核、账户验证、协议签署。顺序申请,这个只要按照微信的规则一步步的申请就可以了。需要注意的是这个申请前两步每一步的审核时间一般是1-3个工作日,需要耐心等等。


  • 2. 进入微信商户平台
    商户平台官方地址:https://pay.weixin.qq.com
    输入登录用户名和密码,用户名和密码需要在接收开户邮箱中查看,每个应用对应一个商户ID,用户名和密码也与之对应。
    登录成功,进入商户平台,如下图:

这里写图片描述

下载证书,获取密钥,这些其实都跟App没多大关系,服务器那边接入需要这些东西。这里需要注意一点,这里的开发者信息中的手机号开发阶段写上自己的就行了,因为设置私钥需要获取验证码,很多人开始会写公司法人的手机号,自然免不了一顿批。手机号可以修改,所以先用自己的就行,但是千万别忘了改成公司领导的,否则以后你离职或者你的手机号不用了,那就呵呵了。


  • 3. 再次进入微信开放平台官网

接下来就是真正的程序员该做的事情了,查看API文档:

这里写图片描述

  • 第一步:“统一下单”服务器代码可参考官方Demo,根据开发语言分为几种,各取所需。此步骤需要注意签名sign的设置,好在官方Demo中已经给了代码。不过需要注意的是,total_fee这个字段是订单的价格,微信是使用分为单位,支付宝是使用元为单位,也就是说付1分钱,支付宝要写成0.01而微信要写成1。
    统一下单成功返回的数据应包括appid,商户号,支付交易回话ID,这三个值需要在第二步“调起支付接口”使用。
  • 第二步:“调起支付接口”可以在APP端完成(是可以实现),强烈建议在服务器完成,因为使用的参数包含了API_KEY,尽量不要出现在客户端代码。要求服务器端在第一步返回的数据中应包含第二步所需的参数值(这里注意sign需要再次签名,与第一步的区分开),按照官方提供的支付API把相应的参数返回给客户端。截止到此,服务器的工作已全部完成,剩下的就是客户的工作了。当然如果服务器端非要客户端完成,APP开发人员需要辛苦一下了,把需要给微信传的参数一一对应的传过去,不过需要写好随机字符串的生成方法,签名的生成方法以及时间戳的生成方法。
  • 第三步:配置APP微信支付开发环境,最简单的方式是把官方Demo中的代码拷贝一下,不容易出错,稍微修改一下就可以了,这里仅以Andorid为例。

这里写图片描述

图中标记的为支付必填,PayActivity可以不加,把其中的方法抽出来写在自己需要支付的地方。

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

这里写图片描述

注意要在入口的Activity中加上这个<intent-filter>
注册广播可以在代码中注册,也可以在清单文件中注册,但是必须使用其中一种注册方式。

到这里距离能测试还差一步了

打开PayActivity 这个类,代码如图所示:(没有贴代码是因为官方Demo里写的很清楚了)

这里写图片描述

关键代码我已标出,如果是服务器返回的数据是已经签名好的,也就是sign值不用再次处理的,这里就简单了,把值获取到拿过来用就行了。如果能跳到微信支付页面恭喜你已经完成了!如果没能打开微信,直接进入WXPayEntryActivity这个类,回调的errorCode = -1,官方给的解释很模糊:

这里写图片描述

这尼玛是什么东西,一个“可能”直接把人打蒙了,我要知道是什么错误我还来查你?!喝杯水压压惊,接下来还得去解决啊。先查找开放平台中的应用是否已经签名并审核通过,确认完没问题再去跟服务器开发人员沟通,对比appid,AppSecret以及API_KEY是否正确。确认没问题再去检查服务器返回的sign签名是否正确(较为出错,注意有顺序的,具体参考官方文档),如果到目前为止还不能正常支付,清理一下微信数据:

这里写图片描述

到目前为止绝大部分的情况都已经能解决,如果你还没解决,建议重新检查一遍代码,按我上面写的易错的几种情况梳理一遍。最后还是不能支付,你就去找微信客服吧。

  • 提醒一下,如果你不想麻烦服务器开发人员,第二步调用支付接口想自己实现,建议参考java语言开发的服务器Demo,里面有你想要的方法,注意时间戳java获取的是毫秒,微信需要的是秒,记得换算一下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值