新版支付宝支付

首先申请并登陆开发者账号,地址:https://open.alipay.com/platform/home.htm
与支付宝进行签约签约管理
在管理中心

创建应用并获取APPID

创建应用.png

应用环境配置

环境配置.png

1 应用网关:这个应用网关是什么?
就是你的支付宝签约支付宝时,指定可用于支付验证的网址。比如你公司后台支付服务器的网址,类似 应用网关 http://www.thisIsAtext.cn/web.php/home/pay/notifyurl在这里要处理一些支付宝的响应
2授权回调地址:
第三方授权或用户信息授权后回调地址。授权链接中配置的redirect_uri的值必须与此值保持一致。如:
授权回调地址 http://www.thisIsAtext.cn/web.php/home/pay/returnurl

题外话:支付宝集成时,有同步返回地址return_url和异步通知地址notify_url,这两个地址中的参数与签名验证有非常大的关系,在支付宝的说明中,强调return_url不可以有自定义参数,否则会导致sign和mysign不相等,但有时我们需要一些自定义参数来做判断

签名验证机制

支付宝签名有两次,第一次是发送的时候,第二次是返回的时候,返回又分为同步返回和异步通知,这两个的签名方式是相同的。
关于支付支付宝异步通知(notify_url)与return_url可查看支付宝接口使用文档说明了解一番

.

生成与配置密钥

第一步 生成RSA密钥
生成方式一(推荐):使用支付宝提供的一键生成工具(内附使用说明)
Windows:下载
MAC OSX:下载

解压打开文件夹,直接运行“支付宝RAS密钥生成器SHAwithRSA1024_V1.0.bat”(WINDOWS)或“SHAwithRSA1024_V1.0.command”(MACOSX),点击“生成RSA密钥”,会自动生成公私钥,然后点击“打开文件位置”,即可找到工具自动生成的密钥。
注意:工具不支持含中文或空格的路径,请下载到英文目录下使用。

第二步 密钥配置
开发者登录开放平台后,找到并进入应用。
点击“RSA(SHA1)密钥”处的“设置开发者公钥”(如已设置则显示“查看开发者公钥”,可修改),将公钥文件去除头尾、换行和空格,仅需填入字符串。
例如转换前公钥pem文件格式:
-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxLDkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unormYQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/QpkddCVXnZ4bAUaQjXQIDAQAB

-----END PUBLIC KEY-----

转换后得到的字符串为:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQWiDVZ7XYxa4CQsZoB3n7bfxLDkeGKjyQPt2FUtm4TWX9OYrd523iw6UUqnQ+Evfw88JgRnhyXadp+vnPKP7unormYQAfsM/CxzrfMoVdtwSiGtIJB4pfyRXjA+KL8nIa2hdQy5nLfgPVGZN4WidfUY/QpkddCVXnZ4bAUaQjXQIDAQAB

第三步 获取支付宝公钥
应用上线后点击“查看支付宝公钥”,即可获取支付宝公钥,用于支付宝返回数据的验签。
对于支付宝公钥,看到的是一个字符串,如下:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrIvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsraprwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUrCmZYI/FCEa3/cNMW0QIDAQAB

如果需要使用文件方式(如使用服务端SDK的PHP/.NET版本)读取支付宝公钥,需要在头尾加入标示后保存至文件,文件内容如下:

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrIvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsraprwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUrCmZYI/FCEa3/cNMW0QIDAQAB

-----END PUBLIC KEY-----

集成并配置SDK

接入移动支付需要集成两个SDK,客户端SDK需要集成在商户自己的APP中,用于唤起支付宝APP并发送交易数据,并在支付宝APP返回商户APP时获得支付结果。服务端SDK需要商户集成在自己的服务端系统中,用于协助解析并验证客户端同步返回的支付结果和异步通知。

集成客户端SDK

官方文档iOS集成流程详解
支付宝SDK的使用
先下载一个支付宝的SDK

选择iOS客户端



在项目里面导入下面的组合文件夹


在pch文件里面导入

#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif

在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:


其中,需要注意的是:
如果是Xcode 7.0之后的版本,需要添加libc++.tbd、libz.tbd;
如果是Xcode 7.0之前的版本,需要添加libc++.dylib、libz.dylib
(如下图)。


3.7.上面的步骤做完运行一下,会报错

解决办法:配置路径:配置完再运行就没事了

Android集成流程详解

集成服务端SDK
在需要使用支付的地方导入下面的头文件(也可写在pch
文件里面)
//订单框架#import "Order.h"//使用RSA加密框架#import "DataSigner.h"//支付报框架#import <AlipaySDK/AlipaySDK.h>

5.在点击支付的方法里面调用下面的方法

这两项用户需要自己填写应用的appID
NSString *appID = @"";

私钥(上面的步骤有生成)
NSString *privateKey = @"";

- (void)doAlipayPay{
 //重要说明 
 //这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成;
 //真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;
 //防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;
/*=======================需要填写商户app申请的===================================*/
/*============================================================================*/
NSString *appID = @"";
NSString *privateKey = @"";
/*============================================================================*/
//partner和seller获取失败,提示
if ([appID length] == 0 || [privateKey length] == 0){ 
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
                                                message:@"缺少appId或者私钥。" 
                                               delegate:self 
                                      cancelButtonTitle:@"确定" 
                                      otherButtonTitles:nil]; 
[alert show]; 
return;
}
/* 
*生成订单信息及签名 
*/
//将商品信息赋予AlixPayOrder的成员变量
Order* order = [Order new];

// NOTE: app_id设置
order.app_id = appID;

// NOTE: 支付接口名称
order.method = @"alipay.trade.app.pay";

// NOTE: 参数编码格式
order.charset = @"utf-8";

// NOTE: 当前时间点
NSDateFormatter* formatter = [NSDateFormatter new];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
order.timestamp = [formatter stringFromDate:[NSDate date]];

// NOTE: 支付版本
order.version = @"1.0";

// NOTE: sign_type设置
order.sign_type = @"RSA";

// NOTE: 商品数据
order.biz_content = [BizContent new];
order.biz_content.body = @"我是测试数据";
order.biz_content.subject = @"1";
order.biz_content.out_trade_no = [self generateTradeNO]; //订单ID(由商家自行制定)
order.biz_content.timeout_express = @"30m"; //超时时间设置
order.biz_content.total_amount = [NSString stringWithFormat:@"%.2f", 0.01]; //商品价格
//将商品信息拼接成字符串
NSString *orderInfo = [order orderInfoEncoded:NO];
NSString *orderInfoEncoded = [order orderInfoEncoded:YES];
NSLog(@"orderSpec = %@",orderInfo);

    // NOTE: 获取私钥并将商户信息签名,外部商户的加签过程请务必放在服务端,防止公私钥数据泄露;
// 需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderInfo];
// NOTE: 如果加签成功,则继续执行支付
if (signedString != nil) { 
    //应用注册scheme,在AliSDKDemo-Info.plist定义URL types 
    NSString *appScheme = @"alisdkdemo"; 

    // NOTE: 将签名成功字符串格式化为订单字符串,请严格按照该格式 
    NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@", orderInfoEncoded, signedString]; 

    // NOTE: 调用支付结果开始支付
     [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) { 
    NSLog(@"123reslut = %@",resultDic);
     }]; 
  }
}
    
- (NSString *)generateTradeNO{ 
static int kNumber = 15; 

NSString *sourceStr = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

NSMutableString *resultStr = [[NSMutableString alloc] init]; 
srand((unsigned)time(0)); 
for (int i = 0; i < kNumber; i++) { 
    unsigned index = rand() % [sourceStr length]; 
    NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)]; 
    [resultStr appendString:oneStr]; } 
  return resultStr;
 }

回调的添加

代码中的回调标识符

工程中配置

提示:
集成支付宝 报错:rsa_private read error : private key is NULL
解决办法:
两中解决方法
1解决方法:
1)在RSADataSigner.m文件中 搜索代码
[result appendString:@"-----BEGIN PRIVATE KEY-----\n"];
将其改成
[result appendString:@"-----BEGIN RSA PRIVATE KEY-----\n"];2)
在RSADataSigner.m文件中 搜索代码
[result appendString:@"\n-----END PRIVATE KEY-----"];
将其改成
[result appendString:@"\n-----END RSA PRIVATE KEY-----"];

2解决方法:
A、将私钥转成PKCS8替换一下原私钥即可
1、生成私钥pem, 执行命令openssl genrsa -out rsa_private_key.pem 1024
2、生成公钥,执行命令openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem3
将RSA私钥转换成PKCS8格式,命令执行
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
( PHP服务端语言读取私钥不需要PKCS8转换)

iOS公钥私钥生成器 密码: pqyk
需要导入的文件 密码: aqyg
ios支付宝demo 密码:cbfx
老版本的支付宝,JoanKing做的demo 密码: dkwf
老版本的支付宝集成文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容