我用ios支付宝sdk下载官网支付怎么判断用户是否安装支付宝

iOS接入支付宝支付(小白都能看懂的支付宝支付) - 简书
下载简书移动应用
写了11443字,被96人关注,获得了151个喜欢
iOS接入支付宝支付(小白都能看懂的支付宝支付)
因为近期项目中需要接入支付宝支付功能,自己也爬了很多的坑,所以做了一下这边文章供大家学习参考,远离爬坑,文章主要讲到以下五部分:
一、支付宝开放平台创建应用
二、签约移动支付功能
三、接入支付前的准备工作附准备工作中遇到难题的解决方法
四、配置官方Demo附BUG解决方法
五、集成项目,具体代码编写、
本文为本人学习记录笔记,如需转载,请注明出处
支付宝开放平台创建应用
管理中心创建应用
1. 应用创建完成后点击查看我的应用详情进行移动支付功能的签约或者2.进入支付宝商家服务页面"/newIndex.htm"选择移动支付功能进行签约
签约过程以下以签约移动支付功能为例子
商户签约审核签约审核具体步骤请参见支付宝官方文档或者
填写签约信息
填写签约信息
上图的附件文档因为有次文档错误导致审核不通过,所以以下贴出审核成功的文档供大家参考
Paste_Image.png
上述签约步骤审核通过之后就可以开始集成工作了
接入前准备工作
第一步、商户密钥管理
这个步骤完全可以看官方文档中的操作,官方文档写得很详细,但是其中有几点需要说明:
一、说明问题上传密钥步骤不知道怎么上传?因为密钥是pem文件,但是上传的是字符串文本。一、解决方法将生成的pem文件复制一份到桌面,改成Txt文件打开即可获取我们需要的字符串,记住当我们引用这两个长的字符串时,字符串不能包括,换行,空格,以及其他误加的字符,所以复制的时候一定要小心。
二、说明问题Mac 自带openssl环境,不用安装,直接终端输入openssl就可以。
配置官方Demo代码部分
支付宝官方Demo中需要配置商户的资料(如下)
//支付宝商户平台中的PID,以2088开头的16位纯数字
#define PartnerID
//收款支付宝账号,商户平台帐号
#define SellerID
@"yq.wen@************"
//商户私钥,自助生成 这里使用的是pkcs8的私钥
#define PartnerPrivKey @"MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBANVMT4S8yKC1BKf5QR6vUeU7R+s2PFkPvVvurQ0mqOn2ON4IYRs8S60LvXTrKgtHLojVOGH/PsNADbCMO5hmFg/49VzAWHZy2SdmuYI7yknOnXuKov4/hV9qJsfgQZH2vOBb/fInnCbGruI2yv1uH/wKbQ265LHq2V7EBFbrio0tAgMBAAECgYEAuOKfnrgg06R0t8EHYDiprSBYc5qcbrqE8bYODHMxQTNrEZKD0Z7PHd0qSLk6xXHa9UKUz+T2mznfY+P6GFyMy4820ULZ3Wpdt+6Tq5LOHnSL7AyFM4yMZGOy1+/dwgmyQE4ipCzTkQYxjFcnWwBp1BNe+otX+YlUsApe6qVl0EECQQD8ipngC4t1BUCA6JNWkq9ay7BU4cMQQK0bj75r5orKqaXas6mmnIQ3Rzd6nVTk/zdjcTA3YSMjpKNHPO3pjoNdAkEA2DgfzAL+CO5eALnmXMoJM2pk7uqNBOFush1dCaJjf8AQ2Y8YizPSH2qKJ45H/oXS7Yz5e+njFrC9fhcsyBnkEQJANMm3/mgLX4uYfxmearNAqkb3dda3Eneid6dlU2KeUlyByaRSavw+etuNEjk+3JsodcXcIUdRtAqfAq4OwQpEFQJBAKCRhWN+8WJ2ik6lv2I3E4AgSdZ3TsRKGWeikL4f3x425wx5zPNLR4bXGsPnUKW+gfaxk3CnL2JhXEewNCxhtdECQQCcw3OSAkMz06cMcAq0VgkMHkPkIrBzJu6vurF2V42zTbjjPSGudfhF4S4hgUjQIFOLlawh+kP9ODAB9hVvu2Gi"
配置以上数据后,真机编译,遇到以下问题
输出错误信息如配置信息中的私钥(即上述PartnerPrivKey)使用的不适pkcs8的私钥的话,则会报以下错误
rsa_private read error : private key is NULL
方法一将私钥转成PKCS8替换一下原私钥即可转换方法如下( PHP服务端语言读取私钥不需要PKCS8转换)OpenSSL& genrsa -out rsa_private_key.pem
OpenSSL& pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_private_key_pkcs8.pem #Java开发者需要将私钥转换成PKCS8格式
OpenSSL& rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem #生成公钥
OpenSSL& exit #退出OpenSSL程序
方法二检查PID是否写正确
接下来重新运行,上述错误已经解决,但遇到新问题如下图
解决方法: 可参考百度中查到的结果
问题源头是因为私钥跟商户上传的公钥不匹配
处理完上述问题之后,就可以进行支付操作了
测试Demo具体操作
1.创建一个AlipayDemoTest项目2.新建一个AliPaySDK文件夹,提取SDK包中以下文件到此文件夹里,
支付宝所需导入SDK文件
3.编译项目,会出现以下问题:
1)"Unknown type name ‘NSString‘ "或"Unknown type name ‘NSData‘ "
这是因为缺少Foundation类库和UIKit类库,支付宝Demo中之所以没有出现此错误,是因为在.pch文件中导入过这些类库
解决办法:只需要在出现错误的文件中导入这些类库即可
2)‘openssl/asn1.h‘ file not found
这是openssl文件夹头文件链接问题,如果openssl文件夹随意拉进项目中,即使添加头文件链接,也可能解决不了此问题,
这也是一开始就将所需要的文件放到一个新建文件夹中再添加到项目中的原因。
解决办法:Targets-&Build Settings-&Header Search Path中添加AliPaySDK文件夹的路径
4.编译项目,会出现以下问题:
Paste_Image.png
解决方法:在中,点击项目名,选择"target"-&"Link Binary With Libraries"添加依赖库。  
Paste_Image.png
编辑程序,已经可以成功编译了,接下来就是集成代码了
#import "AppDelegate.h"
#import &AlipaySDK/AlipaySDK.h&
@interface AppDelegate ()
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
- (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);
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);
return YES;
#import "ViewController.h"
#import "Order.h"
#import "DataSigner.h"
#import &AlipaySDK/AlipaySDK.h&
@interface ViewController ()
@implementation ViewController
#pragma mark -
#pragma mark
==============产生随机订单号==============
- (NSString *)generateTradeNO
static int kNumber = 15;
NSString *sourceStr = @"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
NSMutableString *resultStr = [[NSMutableString alloc] init];
srand((unsigned)time(0));
for (int i = 0; i & kN i++)
unsigned index = rand() % [sourceStr length];
NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)];
[resultStr appendString:oneStr];
return resultS
#pragma mark -
#pragma mark
==============发起支付==============
- (void)touchesBegan:(NSSet&UITouch *& *)touches withEvent:(UIEvent *)event
#pragma mark 以下为客户端操作 / 应在服务端操作
(下列有说明)
*商户的唯一的parnter和seller。
*签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。
/*============================================================================*/
/*=======================需要填写商户app申请的===================================*/
/*============================================================================*/
NSString *partner = @"******";
NSString *seller = @"yq.we*@hao******";
NSString *privateKey = @"MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM2uGfrXqdbPUy5tMlnPIID8woZgjV7J9dBAMw8vRY9EDnYShzHJO65nFwkC63JBwgfBzCOxkuj/yWkweq7R/khPeUzd79ynu08CoOM7KX2DfBf/vUN+hg2oTQqsd4NaJguYDq0mTlQNR6wbW4Zvxjv4i1O9PoGxpaXh/4gHWkxZAgMBAAECgYEAzZ+jy3o2ClIFF+IFN3HyTeHj25HFY6FGxaaZJTIeOYdRactGK4jByK65gcHQfs6s2zJtErYhaBzoT+gujn3T1suSiLxBT5kNMf0vqZXqqzM/VyPnil/AUTC+IEBVi0xU7SbXEk0WplEv3e46ItpCLi6QxFhskUzIt6Go8iArkR0CQQD+b13JOKkBovza53QpzbE7MJHwFYnnwGjiVdMXhHTb7grcatyu2AMmOYGlnBnZodW1Xa/Jq+fkBw466UgDHHlrAkEAzvH3LnbdhgNluaR4527CbLlm+Fh/DJfGySoc97jR/lNJD60r8mCHDNB9Pya7XfqjDHgO+302qK8fVbhE/XSuSwJANVzEDbzNbWNyprKeYVobjq9sHC9YQfvPw5B+elM0cx/ktT/QUvdJCc5Ly6EGpudTO/uPL7vXIbL9IAvnJ4fkSwJBAIerf+Z5TO9vyL/1AMKRDWuj/MqxkdFaq5r0Pft1sk3uogZh/F6xQ7h18rZ1GP8asswY5ZGgXDYoYP2cibY0SZMCQDXZ5751Sf6ZEACzi7ECKopRN77Q22YyjU3ZaXrmqsWrdFe+t3DnISflfhUxh31jB4p8M8V0nFb4KNrfKzKo2q0=";
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
//partner和seller获取失败,提示
if ([partner length] == 0 ||
[seller length] == 0 ||
[privateKey length] == 0)
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"缺少partner或者seller或者私钥。"
delegate:self
cancelButtonTitle:@"确定"
otherButtonTitles:nil];
[alert show];
*生成订单信息及签名
//将商品信息赋予AlixPayOrder的成员变量
Order *order = [[Order alloc] init];
order.partner =
支付宝分配给商户的ID
order.sellerID =
收款支付宝账号(用于收)
order.outTradeNO = [self generateTradeNO]; //订单ID(由商家自行制定)
order.subject = @"卖身不卖艺"; //商品标题
order.body = @"卖身不卖艺"; //商品描述
order.totalFee = [NSString stringWithFormat:@"%.2f",0.01]; //商品价格
order.notifyURL =
@""; //回调URL(通知服务器端交易结果)(重要)
order.service = @"mobile.securitypay.pay"; //接口名称, 固定值, 不可空
order.paymentType = @"1"; //支付类型 默认值为1(商品购买), 不可空
order.inputCharset = @"utf-8"; //参数编码字符集: 商户网站使用的编码格式, 固定为utf-8, 不可空
order.itBPay = @"30m";//未付款交易的超时时间 取值范围:1m-15d, 可空
order.showURL = @"";
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
//应用注册scheme
//在AlixPayDemo-Info.plist定义URL types
//此处要确保唯一值,不然支付完跳转回来的有可能到其他应用
NSString *appScheme = @"URLScheme";
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
//将商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@"orderSpec = %@",orderSpec);
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id&DataSigner& signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString =
if (signedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\\"%@\\"&sign_type=\\"%@\\"",
orderSpec, signedString, @"RSA"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
#pragma mark - 以下为服务端操作 实际操作应在服务端操作(以上客户端操作仅作为参考)
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"total_fee"] =
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
mgr.responseSerializer = [AFHTTPResponseSerializer serializer];
[mgr POST:ServiceURL parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id
_Nullable responseObject) {
NSString *string = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
//将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString =
if (string != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\\"%@\\"&sign_type=\\"%@\\"",
orderSpec, string, @"RSA"];
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types
NSString *appScheme = @"URLScheme";
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error);
正式接入阶段
服务端负责生成订单及签名,及接受支付异步通知。客户端负责使用服务端传来的订单信息调用支付宝支付接口,及根据SDK同步返回的支付结果展示结果页。服务端接入私钥必须放在服务端,签名过程必须放在服务端。
集成支付宝后打包ipa,报如下一系列警告:
Paste_Image.png
解决方法:1)
Go to Build Settings -& Build Options -& Debug Information Format2)
Change the Debug setting from "DWARF with dSYM File" to "DWARF"3)
Leave the Release setting at "DWARF with dSYM File"AlipaySDK.framework 是先 build 的静态 lib ,然后转成的 framework ,但是在 build 静态 lib 时 CLANG_ENABLE_MODULES 没有被设置成 disabled 。
文章有帮到忙就点个“喜欢”吧~~!!!有什么地方不详细的可以提出来,共勉!!!
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
玩转简书的第一步,从这个专题开始。
想上首页热门榜么?好内容想被更多人看到么?来投稿吧!如果被拒也不要灰心哦~入选文章会进一个队...
· 125254人关注
分享 iOS 开发的知识,解决大家遇到的问题,讨论iOS开发的前沿,欢迎大家投稿~
· 24871人关注
· 6096人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:我的web页面接入别人支付宝服务窗,要获取用户的信息需要网关验证吗 - 开源中国社区
当前访客身份:游客 [
当前位置:
有个需求,Java开发的,在别人的支付窗上接入一个菜单,web页面在我自己的服务器上,如果在我的页面上要有个需求,Java开发的,在别人的支付窗上接入一个菜单,web页面在我自己的服务器上,如果在我的页面上要获取关注支付窗用户的信息,需要我自己做网关验证吗。别人支付窗有自己的后台,肯定是做过网关验证了。
从支付窗跳转到我的页面会带上auth_code ,我想问是不是只要有这个auth_code 就可以通过阿里的sdk获取用户的alipay_user_id,而不需要自己再多做网关验证获取关注支付窗用户的信息,需要我自己做网关验证吗。别人支付窗有自己的后台,肯定是做过网关验证了。
从支付窗跳转到我的页面会带上auth_code ,我想问是不是只要有这个auth_code 就可以通过阿里的sdk获取用户的alipay_user_id,而不需要自己再多做网关验证
共有1个答案
<span class="a_vote_num" id="a_vote_num_
没有回调地址的?
--- 共有 1 条评论 ---
有回调地址,从支付窗过来会获得auth_code,但是用户的alipay_user_id需要再另行获取,我的想法是在我程序这边是没有进行网关验证的,能不能用auth_code值调用阿里的sdk来获取用户的信息。
(1年前)&nbsp&
更多开发者职位上
有什么技术问题吗?
蓝川逸风的其它问题
类似的话题支付宝支付成功后怎么判断支付成功_百度知道&18 支付宝移动快捷支付SDK的安装1 认识支付宝移动支付平台
秒后自动跳转到登录页
(奖励5下载豆)
快捷登录:
举报类型:
不规范:上传重复资源
不规范:标题与实际内容不符
不规范:资源无法下载或使用
其他不规范行为
违规:资源涉及侵权
违规:含有危害国家安全等内容
违规:含有反动/色情等内容
违规:广告内容
详细原因:
任何违反下载中心规定的资源,欢迎Down友监督举报,第一举报人可获5-10下载豆奖励。
Android应用开发典型
Android编程14个很有
Android开发中Web_S
Android开发入门与实
4天教会您用Android
Android应用开发入门
2015超级火爆的测试
18 支付宝移动快捷支付SDK的安装1 认识支付宝移动支付平台
上传时间:
技术分类:
资源评价:
(1位用户参与评价)
已被下载&10&次
18 支付宝移动快捷支付SDK的安装与项目实战开发1 认识支付宝移动支付平台,详细请下载查看。
本资料共包含以下附件:
ffa3fced46a6.rar
51CTO下载中心常见问题:
1.如何获得下载豆?
1)上传资料
2)评论资料
3)每天在首页签到领取
4)购买VIP会员服务,无需下载豆下载资源
5)更多途径:点击此处
2.如何删除自己的资料?
下载资料意味着您已同意遵守以下协议:
1.资料的所有权益归上传用户所有
2.未经权益所有人同意,不得将资料中的内容挪作商业或盈利用途
3.51CTO下载中心仅提供资料交流平台,并不对任何资料负责
4.本站资料中如有侵权或不适当内容,请邮件与我们联系()
5.本站不保证资源的准确性、安全性和完整性, 同时也不承担用户因使用这些资料对自己和他人造成任何形式的伤害或损失
下载1457次
下载2536次
下载2074次
相关专题推荐
Google正式在Android官网发布Android
本套视频教程专为希望成为Android开发
本专题收集了android开发的一系列小工
Android目前已经占据了全球智能手机操
本套视频是传智播客3G-Android就业班
本专题精选了Android开发相关的电子书
本专题视频共有67集,是传智播客3G-A
安卓移动平台自2007年11月开放源码以
本课程使用Android 2.3.3平台进行开发
此视频实战内容由浅入深,从游戏开发
新浪微博Android客户端开发视频教程是
本视频由黑马程序员的张泽华老师录制
一大波Android源码来袭。本专题为And
本专题为张泽华老师教授的Android开发
UI设计则是指对软件的人机交互、操作
OpenGL ES (OpenGL for Embedded Sys
本周下载热点
意见或建议:
联系方式:
您已提交成功!感谢您的宝贵意见,我们会尽快处理

我要回帖

更多关于 android集成支付宝sdk 的文章

 

随机推荐