iOS 微信支付开发流程
2017-11-09 00:00
309 查看
摘要: 项目中要用到支付功能,需要支付宝支付、支付宝网页支付、微信支付、银联支付、Apple_pay,所以打算总结一下,方便以后的查阅,也方便大家, 用到的地方避免再次被坑。 今天我们就主要介绍一下微信支付,其他支付也写了对应教程,并且给出了连接。
今天我们就主要介绍一下微信支付,其他支付也写了对应教程,并且给出了连接。
集成前首先要看看文档,微信支付开发文档里面有详细的字段和说明。
微信支付是需要签名的,跟支付宝一样,可以在客户端签名,也可以在后台签名(当然,为了安全还是推荐在服务器上做签名,逻辑也比较好理解)
商户系统和微信支付系统主要交互说明:
用户在商户APP中选择商品,提交订单,选择微信支付。
商户后台收到用户支付单,调用微信支付统一下单接口。
统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。
商户APP调起微信支付。
商户后台接收支付通知。
商户后台查询支付结果。
建议把iOS头文件和支付示例都现在下来
SystemConfiguration.framework
libz.tbd
libsqlite3.0.tbd
CoreTelephony.framework
QuartzCore.framework
然后注册APPID
在支付成功之后,支付结果返回,需要获取url,也需要在Appdelegate中完成,代码如下:
微信SDK自带的方法,处理从微信客户端完成操作后返回程序之后的回调方法,显示支付结果的:
在调起支付的方法中,需要上传的参数包括:appid、partid(商户号)、prepayid(预支付订单ID)、noncestr(参与签名的随机字符串)、timestamp(参与签名的时间戳)、sign(签名字符串)这六个。
在点击支付的控制器中使用核心代码来调起微信客户端支付,这些个参数都是后台传给你的。 加上了注释,应该很好理解的。代码如下:
到这里微信支付就基本完成了,如果小伙伴们在集成过程中遇到什么问题,可以留言给我或者添加qq,在线帮你解决。
能够打开微信客户端,但是打开后只有中间一个白色的 “确定按钮”,点击后会回到客户端上,如果是这样,那应该是prepayid 参数的问题,过期了,或者不是真实的id。
微信支付的单位是分
工程->build setttings -> 搜索other linker flags 添加-Objc -all_load ,运行工程可能会崩溃,原因是程序没有找到sdk库。
白名单:不配置白名单也可以调起支付,如果调不起支付,查看是否是白名单的问题。
打开工程里的info.plist文件 添加LSApplicationQueriesSchemes数组并添加wechat 和 weixin字符串。
或者info.plist右键->source code打开添加下面这段代码
中文名的工程会报这个错误,英文名则不会,这是因为缺少UIKit库 在WXApiObject.h里导入库#import <UIKit/UIKit.h>。
希望可以帮助大家
如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议
iOS技术交流群:668562416
一:介绍
项目中要用到支付功能,需要支付宝支付、支付宝网页支付、微信支付、银联支付、Apple_pay,所以打算总结一下,方便以后的查阅,也方便大家, 用到的地方避免再次被坑。今天我们就主要介绍一下微信支付,其他支付也写了对应教程,并且给出了连接。
集成前首先要看看文档,微信支付开发文档里面有详细的字段和说明。
微信支付是需要签名的,跟支付宝一样,可以在客户端签名,也可以在后台签名(当然,为了安全还是推荐在服务器上做签名,逻辑也比较好理解)
二:业务流程
以下是交互时序图,统一下单API、支付结果通知API和查询订单API等都涉及签名过程,调用都必须在商户服务器端完成。商户系统和微信支付系统主要交互说明:
用户在商户APP中选择商品,提交订单,选择微信支付。
商户后台收到用户支付单,调用微信支付统一下单接口。
统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。
商户APP调起微信支付。
商户后台接收支付通知。
商户后台查询支付结果。
三:下载微信SDK
如果集成了友盟分享里的微信,那就不用下载,也不用配置环境,因为配置友盟分享的时候已经把微信支付的环境都配置好了(包括框架,schema跳转,白名单)如果没有集成过友盟分享那么请到微信开放平台下载SDK。建议把iOS头文件和支付示例都现在下来
四:导入库集成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.2 在Appdelegate中注册APPID
首先要在Appdelegate中引用头文件//微信支付 #import "WXApi.h"
然后注册APPID
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 向微信终端注册ID [WXApi registerApp:@"wxd930ea5d5a258f4f"]; return YES; }
在支付成功之后,支付结果返回,需要获取url,也需要在Appdelegate中完成,代码如下:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { if ([url.host isEqualToString:@"safepay"]) { //跳转支付宝钱包进行支付,处理支付结果 [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) { NSLog(@"result = %@",resultDic); }]; }else if ([url.host isEqualToString:@"pay"]) { // 处理微信的支付结果 [WXApi handleOpenURL:url delegate:self]; } return YES; } // NOTE: 9.0以后使用新API接口 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options { if ([url.host isEqualToString:@"safepay"]) { //跳转支付宝钱包进行支付,处理支付结果 [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) { NSLog(@"result = %@",resultDic); }]; }else if ([url.host isEqualToString:@"pay"]) { // 处理微信的支付结果 [WXApi handleOpenURL:url delegate:self]; } return YES; }
微信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; } } }
4.3 调用支付接口
在调用微信支付类里面,首先增加头文件引用。#import "WXApi.h"
在调起支付的方法中,需要上传的参数包括:appid、partid(商户号)、prepayid(预支付订单ID)、noncestr(参与签名的随机字符串)、timestamp(参与签名的时间戳)、sign(签名字符串)这六个。
在点击支付的控制器中使用核心代码来调起微信客户端支付,这些个参数都是后台传给你的。 加上了注释,应该很好理解的。代码如下:
#pragma mark 微信支付方法 - (void)WechatPay{ //需要创建这个支付对象 PayReq *req = [[PayReq alloc] init]; //由用户微信号和AppID组成的唯一标识,用于校验微信用户 req.openID = appid; // 商家id,在注册的时候给的 req.partnerId = partnerid; // 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你 req.prepayId = prepayid; // 根据财付通文档填写的数据和签名 req.package = package; // 随机编码,为了防止重复的,在后台生成 req.nonceStr = noncestr; // 这个是时间戳,也是在后台生成的,为了验证支付的 NSString * stamp = timestamp; req.timeStamp = stamp.intValue; // 这个签名也是后台做的 req.sign = sign; //发送请求到微信,等待微信返回onResp [WXApi sendReq:req]; }
4.4 判断手机是否安装微信客户端
在需要微信支付的地方调用封装的类方法之后会跳转到微信app,如果没有安装则没有任何反应。这里需要注意,因为没有安装微信,必须要提供webview的方式登录微信来支付,否则苹果公司会拒绝应用上架。但是微信又不自带webview的方式,(支付宝是自带的)所以要判断用户有没有安装微信,如果没有安装微信就不显示微信支付这个按钮。// 判断手机有没有微信 if ([WXApi isWXAppInstalled]) { wechatButton.hidden = NO; }else{ wechatButton.hidden = YES; }
到这里微信支付就基本完成了,如果小伙伴们在集成过程中遇到什么问题,可以留言给我或者添加qq,在线帮你解决。
后续:常见问题解决
如果支付完成后,一直留在微信,那就检查下URLType中的Scheme设置问题。能够打开微信客户端,但是打开后只有中间一个白色的 “确定按钮”,点击后会回到客户端上,如果是这样,那应该是prepayid 参数的问题,过期了,或者不是真实的id。
微信支付的单位是分
工程->build setttings -> 搜索other linker flags 添加-Objc -all_load ,运行工程可能会崩溃,原因是程序没有找到sdk库。
白名单:不配置白名单也可以调起支付,如果调不起支付,查看是否是白名单的问题。
打开工程里的info.plist文件 添加LSApplicationQueriesSchemes数组并添加wechat 和 weixin字符串。
或者info.plist右键->source code打开添加下面这段代码
<key>LSApplicationQueriesSchemes</key> <array><string>wechat</string> <string>weixin </string> </array>
中文名的工程会报这个错误,英文名则不会,这是因为缺少UIKit库 在WXApiObject.h里导入库#import <UIKit/UIKit.h>。
希望可以帮助大家
如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议
iOS技术交流群:668562416
相关文章推荐
- iOS 微信支付 开发流程
- iOS之“微信支付”开发流程
- iOS 微信支付开发流程
- iOS开发之第三方支付微信支付教程,史上最新最全第三方微信支付方式实现、微信集成教程,微信实现流程
- iOS 微信支付 开发流程
- iOS开发零基础教程之上传AppStore流程
- 李洪强iOS开发支付集成之微信支付
- IOS应用内购买App开发完整流程
- IOS 开发流程
- IOS开发笔记2 — 开发部的工作流程
- iOS项目的目录结构和开发流程
- 好文推荐:iOS开发中的Git流程
- ios开发-c语言之流程控制中switch的学习
- IOS项目目录结构和开发流程【极具参考价值!】
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!
- 微信支付的开发流程
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取"产品付费数量等于0的问题"】
- IOS开发--微信支付
- iOS开发流程总结
- iOS 支付宝支付开发流程