一:介绍
项目中要用到支付功能,需要支付宝支付、支付宝网页支付、微信支付、银联支付、Apple_pay、微信代扣,所以打算总结一下,方便以后的查阅,也方便大家, 用到的地方避免再次被坑。
今天我们就主要介绍一下微信代扣,其他支付也对应给出了详细教程。
商户可以通过请求此接口唤起微信委托代扣的页面,用户在微信的页面中完成代扣签约后,微信会同时将签约信息通过异步通知的方式通知给商户后台。如果用户放弃签约或签约失败则不通知。
二:委托扣款模式
1. 纯签约模式
纯签约模式即商户先通过前端页面调用纯签约接口与用户完成代扣协议签约,当需要扣款时可调用申请扣款接口进行自动扣款。
- 纯签约接口
请求Url | https://api.mch.weixin.qq.com/papay/entrustweb |
---|---|
是否需要证书 | 否 |
请求方式 | GET |
- 申请扣款接口
请求Url | https://api.mch.weixin.qq.com/pay/pappayapply |
---|---|
是否需要证书 | 否 |
请求方式 | POST |
返回参数说明 | 扣款接口请求成功,返回success仅代表扣款申请受理成功,不代表扣款成功。扣款是否成功以支付通知的结果为准。 |
说明:
若您在商户平台申请委托扣款时选择了下方的某一种模式,则查看对应模式的说明即可。
自动续费模式:通常用于连续包月、包季、包年的业务场景,对于首次签约的用户,商户可在签约12小时内立即扣款成功;对于已签约的续费场景(非首次扣款场景),微信支付会在商户申请扣款后的24小时再进行扣款。
授权扣款模式:用户与商户侧签订授权扣款协议后,商户可根据用户的即时消费情况进行实时扣款,比如火车票抢票场景可以通过签约授权扣款来实现抢到票后由商户直接进行扣款。
免密支付模式:用于小额免密支付场景,用户点击支付后无需输入密码即可完成支付。
使用流程图:
2. 支付中签约模式
支付中签约即商户先通过后端服务器调用支付中签约接口与用户完成预签约,后调用支付接口完成支付同时正式签约。未完成支付则签约也失败。
- 支付中签约接口
请求Url | https://api.mch.weixin.qq.com/pay/contractorder |
---|---|
是否需要证书 | 否 |
请求方式 | POST |
- 使用流程介绍:
请求支付中签约接口,获取预支付id (对应参数:prepay_id). 此步骤需要根据不同支付方式选择不同的trade_type。
交易类型trade_type为以下几种:
JSAPI--JSAPI支付(或小程序支付)
NATIVE--Native支付
APP--app支付
MWEB--H5支付
不同trade_type决定了调起支付的方式,请根据支付产品正确上传
MICROPAY--付款码支付,付款码支付有单独的支付接口,所以接口不需要上传,该字段在对账单中会出现
按照不同支付方式的不同规则,按要求唤起微信支付收银台。不同的支付方式,对于唤起微信支付收银台的方法要求不同。
用户完成支付,微信通过支付中签约接口中商户上传的通知回调地址(对应参数:notify_url),将支付结果返回给商户,同时将签约结果通过contract_notify_url通知给商户,两次通知皆为异步通知.
三:下载微信SDK
如果集成了友盟分享里的微信,那就不用下载,也不用配置环境,因为配置友盟分享的时候已经把微信支付的环境都配置好了(包括框架,schema跳转,白名单)如果没有集成过友盟分享那么请到微信开放平台下载SDK。
四:导入库集成SDK
4.1 导入SDK库
导入上面那个iOS头文件和库下载下载出来的SDK包的就行,然后需要链接上依赖库,在Target —> BuildPhases —> Link Binary With Libraries— 点击+号 -> 搜索你需要的系统库。
- SystemConfiguration.framework
- libz.tbd
- libsqlite3.0.tbd
- CoreTelephony.framework
- QuartzCore.framework
4.2 设置URL Scheme
商户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID,在APP端开发步骤里面说得很清楚了,需要填在URL Schemes这个地方。
4.3 在Appdelegate中注册APPID
首先要在Appdelegate中引用头文件
//微信支付
#import "WXApi.h"
然后注册APPID
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 向微信终端注册ID
[WXApi registerApp:@"wxd930ea5d5a258f4f"];
return YES;
}
4.4 调用服务端接口进行签约
利用服务端返回的 contractUrl 调起微信签约付款页,contractUrl命名和接口格式以你们服务端给的为准。
OpenWebviewReq *req = [[OpenWebviewReq alloc] init];
req.url = contractUrl;
[WXApi sendReq:req];
4.5 调用服务端接口轮询检查支付状态
微信代付的话,在微信中支付完成后,并不会同步返回结果给我们的 app,只会把支付结果通知我们的服务器,所以需要在我们的 app 中对服务器进行轮询来检查支付结果。
如果是支付中签约模式,即便是处于签约状态,有可能签约成功,但是也有可能扣款时因为余额不足等原因而失败。
到这里微信代扣开发就基本完成了,如果小伙伴们在集成过程中遇到什么问题,可以留言给我或者添加qq,在线帮你解决。