1.首先上支付宝移动支付官方文档地址
网页如下图:
下载SDK,并按照集成详细流程里面需要导入的依赖图导入相关依赖,别导入重复了!!
2.然后在infoPlist里添加设置需要的URLSchemes:
3.添加白名单和网络配置
貌似现在不添加白名单也不打印警告信息了,去年还打印来着,不知道为什么,那位大神知道为什么请私信告诉我一下。。
4.从公司拿到注册的企业支付宝账号,添加应用,和配置公钥,添加应用最好提前做了,因为要审核。
上传公钥就需要生成RSA私钥及公钥,这块我也不知道为什么我用mac自带的openssl生成的秘钥给java后台他说通不过,,然后在windows系统上生成的就可以,我了个擦,也有可能是他处理得不对,那位大神知道为什么请私信告诉我一下。。
秘钥生成流程支付宝官方文档地址
mac生成流程:
第一步用终端命令打开openssl 输入命令:openssl
第二步生成私钥命令:genrsa -out rsa_private_key.pem 1024
因为我们后台是java所以需要把私钥转成pkcs8格式 输入命令:pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
第三部生成公钥命令:rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
好了生成的文件和终端如下图:
找不到这两个文件,搜索名称可以,或者打开finder 按住 shift+command+g 然后输入~/ 再enter就找到了
好了,然后把私钥给后台用于做签名使用。公钥我们拿来上传到公司的支付宝账号上,这两个文件在mac上是打不开的,复制一份把后缀名改成text就打开了。。。
然后复制上传。。这里也是一个坑啊。我擦。
支付宝上传RSA公钥文档地址
然而这个网站目前不好使了,无论怎么复制都会提示你公钥格式错误。。去年其实我上传了一个公钥,但是现在要换了,就是换,点了修改,然后不做任何操作直接保存都是格式错误,好吧,,貌似说的都是废话,,,
下面上有用的上传公钥地址
或者你直接登录支付宝开放平台,点击右上角的 账户及密钥管理 进入到如下页面:
在合作伙伴秘钥这儿上传。主要上传的时候要主要格式,官方文档有所。。
好了秘钥也上传好了,上代码了调支付了;
在要用到支付宝支付的地方导入:#import <AlipaySDK/AlipaySDK.h>
从后台那根据请求到调用支付需要的签名过的请求信息。调用代码就一句:
这块当然你也可以像支付宝demo里一样在本地进行签名。。。看支付宝demo。。。
<pre>
NSLog(@"orderString == %@",orderString);
// orderString 就是请求下来的签名过的请求信息
// Scheme 就是之前添加的URL Schemes
[[AlipaySDK defaultService] payOrder:orderString fromScheme:@"jinyiqiaoAlipay" callback:^(NSDictionary *resultDic) {
// 在这里处理支付的回调信息
返回码官方文档说明地址
}];
</pre>
在这里遇到过几个错误:
1.交易订单处理失败,请稍后再试。(ALI59)
这个错误上网查了下是请求信息的total_fee="0.01999998"参数不正确,金额参数支付宝单位是元,所以最小为两位小数total_fee=“0.01"
2.交易订单处理失败,请稍后再试。(ALI64)
支付官方文档解释地址
按照说的4点一一检查发现还是参数问题。。
官方文档的这个参数:
sign="lBBK%2F0w5LOajrMrji7DUgEqNjIhQbidR13GovA5r3TgIbNqv231yC1NksLdw%2Ba3JnfHXoXuet6XNNHtn7VE%2BeCoRO1O%2BR1KugLrQEZMtG5jmJIe2pbjm%2F3kb%2FuGkpG%2BwYQYI51%2BhA3YBbvZHVQBYveBqK%2Bh8mUyb7GM1HxWs9k4%3D” 进行了url编码,把特殊字符转成了%2F这种格式。。然而我们后台没给转,打印显示的是+号等。改成Url编码就好了。。
appDelegate里的配置按照官方文档来就是了:
官方文档配置支付宝客户端返回url处理方法。
(外部存在支付包钱包,支付宝钱包将处理结果通过url返回。)
如示例AliSDKDemo\APAppDelegate.m文件中,增加引用代码:
<pre>
import <AlipaySDK/AlipaySDK.h>
</pre>
在@implementation AppDelegate中增加如下代码:
<pre>
-
(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) {
//【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
NSLog(@"result = %@",resultDic);
}];
}
if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回authCode[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) { //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】 NSLog(@"result = %@",resultDic); }];
}
return YES;
}
</pre>
到这里支付就成功了。。