微信支付
商户系统和微信支付系统主要交互说明:
步骤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】(查单实现可参考:支付回调和查单实现指引)
微信官方文档参考:
1.developers.weixin.qq.com/doc/oplatfo…
2.pay.weixin.qq.com/wiki/doc/ap…
Universal Link链接生成:iOS 唤起APP之Universal Link(通用链接)
当前使用的cocopods集成SDK1.8.7版本,现在开始代码阶段吧.
一 AppDelegate相关代码
//微信注册
[WXApi registerApp:WXAppID universalLink:WXUniversalLinks];
//回调代理设置
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
if ([[url scheme] isEqualToString:WXAppID]) {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if ([[url scheme] isEqualToString:WXAppID]) {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
return YES;
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
return [WXApi handleOpenUniversalLink:userActivity delegate:[WXApiManager sharedManager]];
}
二 WXApiManager响应支付结果管理,与官方demo类似加上你的逻辑处理
+(instancetype)sharedManager {
static dispatch_once_t onceToken;
static WXApiManager *instance;
dispatch_once(&onceToken, ^{
instance = [[WXApiManager alloc] init];
});
return instance;
}
#pragma mark - WXApiDelegate
- (void)onResp:(BaseResp *)resp {
if([resp isKindOfClass:[PayResp class]]){
//支付返回结果,实际支付结果需要去微信服务器端查询
PayResp *response=(PayResp*)resp;
[[NSNotificationCenter defaultCenter] postNotificationName:@"wechatPayStateChange" object:nil userInfo:@{@"response": response}];
switch(response.errCode){
case WXSuccess:
//服务器端查询支付通知或查询API返回的结果再提示成功
HSLog(@"支付成功");
break;
default:
HSLog(@"支付失败,retcode=%d",response.errCode);
break;
}
}else {
}
}
- (void)onReq:(BaseReq *)req {
HSLog(@"onReq");
}
三 支付页响应结果
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(wechatPayStateChange:) name:@"wechatPayStateChange" object:nil];
-(void)wechatPayStateChange:(NSNotification*)notification {
PayResp *response= [notification.userInfo objectForKey:@"response"];
switch(response.errCode){
case WXSuccess:{
[MBProgressHUD showSuccess:@"支付成功"];
break;
}
case WXErrCodeUserCancel:
[MBProgressHUD showError:@"支付取消"];
break;
default:
[MBProgressHUD showError:@"支付失败"];
break;
}
}
支付宝支付
支付宝支付集成相对简单,直接看这篇官方文档就够了