24H免费课程咨询  TEL:13401595960   QQ:1870218756  微信:13401595960(李老师)

东方博宜

网站首页 > 软件开发资讯 > IOS开发

【 常州iOS开发培训班】iOS开发支付集成之微信支付

2018-05-13 21:53:10 东方博宜 阅读

交互流程


这个流程和支付宝的流程都差不多,理解了其实是一样的。


首先需要理清楚流程:


用户使用APP客户端,选择商品下单。

商户客户端(就是你做的APP)将用户的商品数据传给商户服务器,请求生成支付订单。

商户后台调用统一下单API向微信的服务器发送请求,微信服务器生成预付单,并生成一个prepay_id返回给商户后台。

商户后台将这个prepay_id返回给商户客户端。

用户点击确认支付,这时候商户客户端调用SDK打开微信客户端,进行微信支付。

微信客户端向微信服务器发起支付请求并返回支付结果(他们之间交互用的就是prepay_id这个参数,微信的服务器要验证微信客户端传过去的参数是否跟第三步中生成的那个id一致)。

用户输入支付密码后,微信客户端提交支付授权,跟微信服务器交互,完成支付

微信服务器给微信客户端发送支付结果提示,并异步给商户服务器发送支付结果通知。

商户客户端通过支付结果回调接口查询支付结果,并向后台检查支付结果是否正确,后台返回支付结果。

商户客户端显示支付结果,完成订单,发货。


虽然看起来有点多,但是理解起来并不复杂,跟我们平时手机上买东西是一样的。我们客户端需要做的就是


调起微信客户端发起支付

显示支付结果


集成过程


首先是要下载SDK



微信SDK下载


建议头文件和示例都下载出来看看。(吐槽下,官方的示例难看死了,看的眼晕!注释都没几个。。。鄙视之)


导入微信支付SDK库


导入上面那个iOS头文件和库下载下载出来的SDK包的就行啦,我这里的是SDK1.6.2. 然后需要链接上依赖库,在Target —> BuildPhases —> Link Binary With Libraries— 点击+号 -> 搜索你需要的系统库。


SystemConfiguration.framework

libz.tbd

libsqlite3.0.tbd

CoreTelephony.framework

QuartzCore.framework


设置URL Scheme


在注册微信平台APP的时候,会给一个唯一识别标识符(APPID),在APP端开发步骤里面说得很清楚了,需要填在URL Schemes这个地方




在Appdelegate中注册APPID


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

/**

*  向微信终端注册ID,这里的APPID一般建议写成宏,容易维护。@“测试demo”不需用管。这里的id是假的,需要改这里还有target里面的URL Type

*/

[WXApi registerApp:@"wxd930ea5d5a258f4f" withDescription:@"测试demo"];

return YES;

}


处理微信通过URL启动时传递的数据


//前面的两个方法被iOS9弃用了,如果是Xcode7.2网上的话会出现无法进入进入微信的onResp回调方法,就是这个原因。本来我是不想写着两个旧方法的,但是一看官方的demo上写的这两个,我就也写了。。。。

//9.0前的方法,为了适配低版本 保留

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{

return [WXApi handleOpenURL:url delegate:self];

}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{

return [WXApi handleOpenURL:url delegate:self];

}

//9.0后的方法

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{

//这里判断是否发起的请求为微信支付,如果是的话,用WXApi的方法调起微信客户端的支付页面(://pay 之前的那串字符串就是你的APPID,)

return  [WXApi handleOpenURL:url delegate:self];

}

//微信SDK自带的方法,处理从微信客户端完成操作后返回程序之后的回调方法,显示支付结果的

-(void) onResp:(BaseResp*)resp

{

//启动微信支付的response

NSString *payResoult = [NSString stringWithFormat:@errcode:%d, resp.errCode];

if([resp isKindOfClass:[PayResp class]]){

//支付返回结果,实际支付结果需要去微信服务器端查询

switch (resp.errCode) {

case 0:

payResoult = @支付结果:成功!;

break;

case -1:

payResoult = @支付结果:失败!;

break;

case -2:

payResoult = @用户已经退出支付!;

break;

default:

payResoult = [NSString stringWithFormat:@支付结果:失败!retcode = %d, retstr = %@, resp.errCode,resp.errStr];

break;

}

}

}

常州东方博宜是一家专注IT,互联网,电脑方面的顶尖培训机构,欢迎社会及院校有志互联网营销,搜索引擎营销的人士,来东方博宜报名学习,互相交流。

常州东方博宜地址:常州天宁区延陵西路2号工人文化宫5号楼

 2.新北区太湖东路9-4号常州创意园E12


Powered by 东方博宜教育咨询江苏有限公司  ©2008-2018 www.czos.cn