iOS 微信支付和支付宝支付
1、微信支付
1)准备
通过cocoapods安装:
#微信支付
pod 'WechatOpenSDK', '~> 1.8.1’
在微信开放平台注册应用,获取APPKey
在plist文件中添加白名单,见文章末尾
在Info中添加URL Types,URL Schemes 为appkey
2)在APPDelegate中导入头文件
#import <WXApi.h>
#import <WXApiObject.h>
遵守协议<WXApiDelegate>
注册微信支付
// 注册微信支付
[WXApi registerApp:kAppKey_Wechat];
3)iOS9之后重写以下方法:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
// 用于极光分享,可以忽略BOOL result = [JSHAREService handleOpenUrl:url];//6.3的新的API调用,是为了兼容国外平台(例如:新版facebookSDK,VK等)的调用[如果用6.2的api调用会没有回调],对国内平台没有影响// BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url options:options];if (!result) {// 其他如支付等SDK的回调if ([url.host isEqualToString:@"safepay"]) {//跳转支付宝钱包进行支付,处理支付结果[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {NSLog(@"result = %@",resultDic);if ([resultDic[@"resultStatus"] isEqualToString:@"9000"]) {[SVProgressHUD showSuccessWithStatus:@"支付成功"];} else {}}];return YES;} else if ([url.scheme isEqualToString:kAppKey_Wechat] && [url.host isEqualToString:@"pay"]) {return [WXApi handleOpenURL:url delegate:self];}return result;
}
4)实现微信支付代理方法:
#pragma mark - WXApiDelegate
-(void) onReq:(BaseReq*)req {DLog(@"---=-=-=-=-==");
}-(void)onResp:(BaseResp *)resp {if ([resp isKindOfClass:[PayResp class]]) {PayResp * response = (PayResp *)resp; // 微信终端返回给第三方的关于支付结果的结构体switch (response.errCode) {case WXSuccess:{// 支付成功,向后台发送消息DLog(@"支付成功");[SVProgressHUD showSuccessWithStatus:@"支付成功"];}break;case WXErrCodeCommon:{ //签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等DLog(@"支付失败");}break;case WXErrCodeUserCancel:{ //用户点击取消并返回DLog(@"取消支付");kPostNotificationWithName(@"userCanclePay");}break;case WXErrCodeSentFail:{ //发送失败DLog(@"发送失败");}break;case WXErrCodeUnsupport:{ //微信不支持DLog(@"微信不支持");}break;case WXErrCodeAuthDeny:{ //授权失败DLog(@"授权失败");}break;default:break;}}
}
5)在支付页导入头文件,通过接口获取微信支付的参数,并赋值给消息结构体:PayReq
if ([WXApi isWXAppInstalled]) {NSDictionary * msgDic = result[@"wxPayInfo"];PayReq *req = [[PayReq alloc] init];req.openID = kAppKey_Wechat;req.partnerId = msgDic[@"partnerid"];req.prepayId = msgDic[@"prepayid"];req.package = msgDic[@"package"];req.nonceStr = msgDic[@"noncestr"];NSString * stamp = msgDic[@"timestamp"];req.timeStamp = stamp.intValue;req.sign = msgDic[@"sign"];if ([WXApi sendReq:req]) {DLog(@"吊起成功");} else {DLog(@"吊起失败");}} else {[SVProgressHUD showInfoWithStatus:@"该手机没有安装微信"];}
2、支付宝支付
1)准备
导入AlipaySDK
在蚂蚁金服开放平台注册应用,获取APPKey
在Info中添加URL Types,URL Schemes 为自己书写,保证唯一
导入依赖库:
依赖库1
其中,需要注意的是:
- 如果是Xcode 7.0之后的版本,需要添加libc++.tbd、libz.tbd;
- 如果是Xcode 7.0之前的版本,需要添加libc++.dylib、libz.dylib(如下图)。
依赖库2
在APPDelegate中导入头文件
#import <AlipaySDK/AlipaySDK.h>
2)重写openURL方法,见上文微信支付第4步
3)在支付页通过接口获取支付宝支付的参数,然后调用支付宝接口
// 注意,这里的Scheme参数就是Info中URL Types中填写的URL Schemes
NSString * msgStr = result[@"aliData"];
[[AlipaySDK defaultService] payOrder:msgStr fromScheme:@"alipayforlantingzhibo" callback:^(NSDictionary *resultDic) {NSLog(@"reslut = %@",resultDic);if ([resultDic[@"resultStatus"] isEqualToString:@"9000"]) {[SVProgressHUD showSuccessWithStatus:@"支付成功"];} else {}}];
附:白名单:(部分)
<key>LSApplicationQueriesSchemes</key>
<array>
<string>wechat</string>
<string>weixin</string>
<string>sinaweibohd</string>
<string>sinaweibo</string>
<string>sinaweibosso</string>
<string>weibosdk</string>
<string>weibosdk2.5</string>
<string>mqqapi</string>
<string>mqq</string>
<string>mqqOpensdkSSoLogin</string>
<string>mqqconnect</string>
<string>mqqopensdkdataline</string>
<string>mqqopensdkgrouptribeshare</string>
<string>mqqopensdkfriend</string>
<string>mqqopensdkapi</string>
<string>mqqopensdkapiV2</string>
<string>mqqopensdkapiV3</string>
<string>mqqopensdkapiV4</string>
<string>mqzoneopensdk</string>
<string>wtloginmqq</string>
<string>wtloginmqq2</string>
<string>mqqwpa</string>
<string>mqzone</string>
<string>mqzonev2</string>
<string>mqzoneshare</string>
<string>wtloginqzone</string>
<string>mqzonewx</string>
<string>mqzoneopensdkapiV2</string>
<string>mqzoneopensdkapi19</string>
<string>mqzoneopensdkapi</string>
<string>mqqbrowser</string>
<string>mttbrowser</string>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>twitter</string>
<string>twitterauth</string>
<string>JChatPro</string>
</array>
iOS 微信支付和支付宝支付相关推荐
- IOS集成微信支付或者支付宝支付功能小结
2019独角兽企业重金招聘Python工程师标准>>> 第一,你需要有微信开发平台的开发者账号,(网址https://open.weixin.qq.com/,或者自行百度" ...
- Vue app安卓端移动端实现微信支付和支付宝支付
当前项目借助调用安卓和ios方法跳转第三方支付平台实现微信支付和支付宝支付 涉及到的安卓方法: window.AndroidFunction.wxpay('传递的参数') // 点击确认支付hand ...
- 个人开发者微信支付和支付宝支付
个人开发者是不能申请微信支付和支付宝支付的 很多第三方使用添加二维码监听转账操作来实现是否功能
- 腾腾流氓,云云更流氓(问微信怎样接入支付宝支付),手贱的赶紧点,你会感谢我的...
草原上的两匹马! 打从当年微信开始布局公众号之初时,估计就已经想到了与支付宝正面冲突的场面,所以微信先来个瞒天过海,在春晚搞了个微信红包,那叫一个火呀,此时的云云隐隐感觉到些许不安. 早期的微信开发者 ...
- 个人开发者只要一行代码接入微信支付和支付宝支付
接入支付功能 对于个人开发者来说,我们很希望我们开发的App被广泛使用,同时可以获得一些额外收入,那就更好了.但是在微信开放平台或者支付宝开放平台申请支付功能,需要是企业才可以接入,对于我们个人开 ...
- 微信支付及支付宝支付开发指南
从开始学习android开始到现在还没搞过三方支付,感觉挺遗憾的.看到最近有几篇关于微信支付和支付宝支付的文章,稍微进行一下整合,供大家参考. ---------------------------- ...
- 微信支付和支付宝支付整合(含设计模式1)
微信支付和支付宝支付整合(含设计模式1) 1.说明: 设计模式:单例+策略模式+抽象 在开发中经常对接微信支付和支付宝支付,相对来说,阿里的文档比微信的接口文档清晰一点,这里用的第三方库(com.gi ...
- 关于微信支付,支付宝支付
关于微信支付,支付宝支付 微信支付和支付宝支付属于第三方支付. 第三方支付是指具备一定实力和信誉保障的独立机构,通过与网联对接而促成交易双方进行交易的网络支付模式. 在第三方支付模式,买方选购商品后, ...
- php做微信支付和支付宝支付的方法
php做微信支付和支付宝支付的方法 直接去官方下载demo 然后证书换一下 appid换下 就好了 如果测试成功 直接复制到项目中即可 这个方法目前是最好 最稳定的方法 查看原文:http://new ...
最新文章
- Django web框架-----Django连接现有mysql数据库
- 物流机器人站上风口!未来市场增长获双引擎加持
- boost::python::ndarray相关的测试程序
- 大话 JavaScript 动画
- iOS开发--AVFoundation自定义相机
- 使用fastcgi_cache加速Nginx
- java方面的文献综述怎么写_关于java的文献综述
- 基坑计算理论m法弹性支点法_建筑基坑支护考题汇总.doc
- Science观点:不同细菌物种间极少合作—合理利用细菌间普遍存在的竞争关系来替代抗生素...
- How browsers work----Introduction
- BP神经网络的初步介绍
- 进程间通讯(IPC)(有信号捕捉函数)
- PHP--extract 从数组中将变量导入到当前的符号表
- 【Power Automate】日期格式化函数formatDateTime详细说明及示例
- 【论文写作】LaTeX学习笔记:一文入门LaTeX(超详细)
- 双绞线绞合消除电磁干扰原理
- JS对象中添加新的属性及修改字段名
- vscode保存卡顿,显示正在从“‘Vetur‘, ‘ESLint‘”获取代码操作([配置]
- 动易安全开发手册 完整版
- Qt 加载了qm文件翻译无效的bug的分享
热门文章
- 解决:whm搬站出现的mysql error message:Can't find any matching row in the user table
- 运动的“点”与“线”,竟然能产生错觉???
- 【转】BCWS、BCWP、ACWP的理解
- Mysql启动时pid未更新_MySQL启动报错 无法更新PID文件
- 计算机慢怎么解决6,解决电脑运行慢卡顿问题的六种方法
- HttpWebRequest 无法连接到远程服务器
- Linux信号量(3)-内核信号量
- spacy语言模型安装踩坑经历
- Lake Counting S
- snipaste滚动截图方法_老板让你把整个网页截图形成长图,具体怎么做?