微信支付接入

协议规则

屏幕快照 2016-03-19 下午10.13.02

场景介绍

商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。

交互细节如下:

步骤1:用户进入商户APP,选择商品下单、确认购买,进入支付环节。商户服务后台生成支付订单,签名后将数据传输到APP端。以微信提供的DEMO为例,见图8.1。

步骤2:用户点击后发起支付操作,进入到微信界面,调起微信支付,出现确认支付界面,见图8.2。

步骤3:用户确认收款方和金额,点击立即支付后出现输入密码界面,可选择零钱或银行卡支付见图8.3。
屏幕快照 2016-03-20 上午9.11.22
第四步:输入正确密码后,支付完成,用户端微信出现支付详情页面。见图8.4。

第五步:回跳到商户APP中,商户APP根据支付结果个性化展示订单处理结果。见图8.5。
屏幕快照 2016-03-20 上午9.11.13

业务流程

以下是交互时序图,统一下单API、支付结果通知API和查询订单API等都涉及签名过程,调用都必须在商户服务器端完成。如图8.6所示。
9F12842A-1F14-4DBA-8DDD-C190E4F81603

商户系统和微信支付系统主要交互说明:

步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。

步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。

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

步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明】

步骤5:商户后台接收支付通知。api参见【支付结果通知API】

步骤6:商户后台查询支付结果。,api参见【查询订单API】

IOS开发要点说明

以下项目开发环境以Xcode10.0,运行环境为IOS7.0为例,说明其开发中需要的操作。

1、项目设置APPID

商户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性中的URL Schemes为您的APPID。如图8.7标红位置所示。

屏幕快照 2016-03-20 上午9.10.22

2、注册APPID

商户APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID,代码如下:

[WXApi registerApp:@”wxd930ea5d5a258f4f” withDescription:@”demo 2.0″];

3、调起支付

商户服务器生成支付订单,先调用【统一下单API】生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付。以下是调起微信支付的关键代码:

PayReq *request = [[[PayReq alloc] init] autorelease];

request.partnerId = @”10000100″;

request.prepayId= @”1101000000140415649af9fc314aa427″;

request.package = @”Sign=WXPay”;

request.nonceStr= @”a462b76e7436e98e0ed6e13c64b4fd1c”;

request.timeStamp= @”1397527777″;

request.sign= @”582282D72DD2B03AD892830965F428CB16E7A256″;

[WXApi sendReq:request];

注意:该sign生成字段名列表见调起支付API

4、支付结果回调

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

-(void)onResp:(BaseResp*)resp{

if ([respisKindOfClass:[PayRespclass]]){

PayResp*response=(PayResp*)resp;

switch(response.errCode){

caseWXSuccess:

//服务器端查询支付通知或查询API返回的结果再提示成功

NSlog(@”支付成功”);

break;

default:

NSlog(@”支付失败,retcode=%d”,resp.errCode);

break;

}

}

}

回调中errCode值列表:

屏幕快照 2016-03-20 上午9.06.06

调用微信的步骤:
1.导入微信支付SDK注册微信支付。
2.设置微信APPID为URL Schemes。
3.导入微信支付依赖的类库,发起支付,调起微信支付。
屏幕快照 2016-03-20 上午12.06.13
4.处理支付结果。
注意:
1.iOS9系统策略更新,限制了http协议的访问,此外应用需要在Info.plist中将要使用的URL Schemes列为白名单,才可以正常检查其他应用是否安装。受此影响,当你的应用在iOS9中需要使用微信SDK的相关能力(分享,收藏,支付,登录)时,需要在info.plist里增加如下代码:
LSApplicationQueriesSchemes

weixin

NSAppTransportSecurity

NSAllowsArbitraryLoads

2.开发者需要在工程中链接上CoreTelephony.framework
3.解决bitcode编译不过问题
屏幕快照 2016-03-19 下午11.54.32
手机端必须安装微信才能调起微信支付,在我们调微信时,首先要做判断是否安装微信步骤。
屏幕快照 2016-03-20 上午12.14.05

分享到: 更多
Separator image Posted in IOS.

发表评论

电子邮件地址不会被公开。 必填项已用*标注