新版支付寶總結(jié)

整個支付邏輯分為兩個部分

1.通過跳轉(zhuǎn)支付寶APP完成支付
     新版需要appID 和  privateKey
2.通過手機(jī)網(wǎng)頁完成支付
     和舊版一樣需要pid appID 和  privateKey

對訂單模型order的總結(jié)

訂單模型中分為兩個部分
商品模型

@interface BizContent : NSObject

// NOTE: (非必填項)商品描述
@property (nonatomic, copy) NSString *body;

// NOTE: 商品的標(biāo)題/交易標(biāo)題/訂單標(biāo)題/訂單關(guān)鍵字等。
@property (nonatomic, copy) NSString *subject;

// NOTE: 商戶網(wǎng)站唯一訂單號
@property (nonatomic, copy) NSString *out_trade_no;

// NOTE: 該筆訂單允許的最晚付款時間,逾期將關(guān)閉交易。
//       取值范圍:1m~15d m-分鐘,h-小時,d-天,1c-當(dāng)天(1c-當(dāng)天的情況下,無論交易何時創(chuàng)建,都在0點(diǎn)關(guān)閉)
//       該參數(shù)數(shù)值不接受小數(shù)點(diǎn), 如1.5h,可轉(zhuǎn)換為90m。
@property (nonatomic, copy) NSString *timeout_express;

// NOTE: 訂單總金額,單位為元,精確到小數(shù)點(diǎn)后兩位,取值范圍[0.01,100000000]
@property (nonatomic, copy) NSString *total_amount;

// NOTE: 收款支付寶用戶ID。 如果該值為空,則默認(rèn)為商戶簽約賬號對應(yīng)的支付寶用戶ID (如 2088102147948060)
@property (nonatomic, copy) NSString *seller_id;

// NOTE: 銷售產(chǎn)品碼,商家和支付寶簽約的產(chǎn)品碼 (如 QUICK_MSECURITY_PAY)
@property (nonatomic, copy) NSString *product_code;

@end

訂單模型

@interface Order : NSObject

// NOTE: 支付寶分配給開發(fā)者的應(yīng)用ID(如2014072300007148)
@property (nonatomic, copy) NSString *app_id;

// NOTE: 支付接口名稱
@property (nonatomic, copy) NSString *method;

// NOTE: (非必填項)僅支持JSON
@property (nonatomic, copy) NSString *format;

// NOTE: (非必填項)HTTP/HTTPS開頭字符串
@property (nonatomic, copy) NSString *return_url;

// NOTE: 參數(shù)編碼格式,如utf-8,gbk,gb2312等
@property (nonatomic, copy) NSString *charset;

// NOTE: 請求發(fā)送的時間,格式"yyyy-MM-dd HH:mm:ss"
@property (nonatomic, copy) NSString *timestamp;

// NOTE: 請求調(diào)用的接口版本,固定為:1.0
@property (nonatomic, copy) NSString *version;

// NOTE: (非必填項)支付寶服務(wù)器主動通知商戶服務(wù)器里指定的頁面http路徑
@property (nonatomic, copy) NSString *notify_url;

// NOTE: (非必填項)商戶授權(quán)令牌,通過該令牌來幫助商戶發(fā)起請求,完成業(yè)務(wù)(如201510BBaabdb44d8fd04607abf8d5931ec75D84)
@property (nonatomic, copy) NSString *app_auth_token;

// NOTE: 具體業(yè)務(wù)請求數(shù)據(jù)
@property (nonatomic, strong) BizContent *biz_content;

// NOTE: 簽名類型
@property (nonatomic, copy) NSString *sign_type;


/**
 *  獲取訂單信息串
 *
 *  @param bEncoded       訂單信息串中的各個value是否encode
 *                        非encode訂單信息串,用于生成簽名
 *                        encode訂單信息串 + 簽名,用于最終的支付請求訂單信息串
 */
- (NSString *)orderInfoEncoded:(BOOL)bEncoded;

@end

快速完成支付功能步驟(通過跳轉(zhuǎn)支付寶APP方式)(步驟一和二在服務(wù)器完成)

步驟1:生成訂單信息. 調(diào)用order.m里的函數(shù)description將商品信息拼接成字符串作為待簽名字符串,如:

app_id=2015052600090779&biz_content={"timeout_express":"30m","seller_id":"","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.02","subject":"1","body":"我是測試數(shù)據(jù)","out_trade_no":"ZQLM3O56MJD4SK3"}&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA&timestamp=2016-07-28 20:36:11&version=1.0

步驟2:對訂單信息簽名. 使用類CreateRSADataSigner,調(diào)用signString簽名函數(shù)做簽名,如:

 // 獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode
    id<DataSigner> signer = CreateRSADataSigner(privateKey);
    NSString *signedString = [signer signString:authInfoStr];

步驟3:把簽名結(jié)果賦值給參數(shù)sign,并把sign加入之前的待簽名數(shù)組中,此時得到的便是要請求給支付寶的全部數(shù)據(jù)。

app_id=2015052600090779&biz_content={"timeout_express":"30m","seller_id":"","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.02","subject":"1","body":"我是測試數(shù)據(jù)","out_trade_no":"ZQLM3O56MJD4SK3"}&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA&timestamp=2016-07-28 20:36:11&version=1.0&sign=*********

步驟4:調(diào)用(AlipaySDK *)defaultService類下面的支付接口函數(shù),喚起支付寶支付頁面。

(void)payOrder:(NSString *)orderStr
  fromScheme:(NSString *)schemeStr
    callback:(CompletionBlock)completionBlock
appScheme為app在info.plist注冊的scheme。

步驟5:當(dāng)這筆交易被買家支付成功后支付寶收銀臺上顯示該筆交易成功,并提示用戶“返回”。此時在APAppDelegate.m的 - (BOOL)application:(UIApplication )application openURL:(NSURL )url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 中調(diào)用獲取返回數(shù)據(jù)的代碼【iOS9.0以上(包括iOS9.0)需要在 - (BOOL)application:(UIApplication *)app openURL:(NSURL )url options:(NSDictionary<NSString, id> *)options 中執(zhí)行 】:

[[AlipaySDK defaultService]
processOrderWithPaymentResult:url
standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);//返回的支付結(jié)果
//【由于在跳轉(zhuǎn)支付寶客戶端支付的過程中,商戶app在后臺很可能被系統(tǒng)kill了,所以pay接口的callback就會失效,請商戶對standbyCallback返回的回調(diào)結(jié)果進(jìn)行處理,就是在這個方法里面處理跟callback一樣的邏輯】
}];

快速完成支付功能步驟(通過網(wǎng)頁完成方式)

步驟1:生成APAuthV2Info對象, 將授權(quán)信息拼接成字符串作為待簽名字符串,如:

  //生成 auth info 對象
    APAuthV2Info *authInfo = [APAuthV2Info new];
    authInfo.pid = pid;
    authInfo.appID = appID;
    
    //auth type
    NSString *authType = [[NSUserDefaults standardUserDefaults] objectForKey:@"authType"];
    if (authType) {
        authInfo.authType = authType;
    }
    
    //應(yīng)用注冊scheme,在AlixPayDemo-Info.plist定義URL types
    NSString *appScheme = @"alisdkdemo";
    
    // 將授權(quán)信息拼接成字符串
    NSString *authInfoStr = [authInfo description];
    NSLog(@"authInfoStr = %@",authInfoStr);

步驟2:使用類CreateRSADataSigner,調(diào)用signString簽名函數(shù)做簽名,如:

 // 獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode
    id<DataSigner> signer = CreateRSADataSigner(privateKey);
    NSString *signedString = [signer signString:authInfoStr];

步驟3:把簽名結(jié)果賦值給參數(shù)sign,并把sign加入之前的待簽名數(shù)組中,此時得到的便是要請求給支付寶的全部數(shù)據(jù)。

app_id=2015052600090779&biz_content={"timeout_express":"30m","seller_id":"","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.02","subject":"1","body":"我是測試數(shù)據(jù)","out_trade_no":"ZQLM3O56MJD4SK3"}&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA&timestamp=2016-07-28 20:36:11&version=1.0&sign=*********

步驟4:調(diào)用(AlipaySDK *)defaultService類下面的支付接口函數(shù),喚起支付寶支付頁面。

// 將簽名成功字符串格式化為訂單字符串,請嚴(yán)格按照該格式
   authInfoStr = [NSString stringWithFormat:@"%@&sign=%@&sign_type=%@", authInfoStr, signedString, @"RSA"];
        [[AlipaySDK defaultService] auth_V2WithInfo:authInfoStr
                                         fromScheme:appScheme
                                           callback:^(NSDictionary *resultDic) {
                                               NSLog(@"result = %@",resultDic);
                                               // 解析 auth code
                                               NSString *result = resultDic[@"result"];
                                               NSString *authCode = nil;
                                               if (result.length>0) {
                                                   NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                                                   for (NSString *subResult in resultArr) {
                                                       if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                                                           authCode = [subResult substringFromIndex:10];
                                                           break;
                                                       }
                                                   }
                                               }
                                               NSLog(@"授權(quán)結(jié)果 authCode = %@", authCode?:@"");
                                           }];

步驟5:當(dāng)這筆交易被買家支付成功后支付寶收銀臺上顯示該筆交易成功,并提示用戶“返回”。此時在APAppDelegate.m的 - (BOOL)application:(UIApplication )application openURL:(NSURL )url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 中調(diào)用獲取返回數(shù)據(jù)的代碼【iOS9.0以上(包括iOS9.0)需要在 - (BOOL)application:(UIApplication *)app openURL:(NSURL )url options:(NSDictionary<NSString, id> *)options 中執(zhí)行 】:

[[AlipaySDK defaultService]
processOrderWithPaymentResult:url
standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);//返回的支付結(jié)果
//【由于在跳轉(zhuǎn)支付寶客戶端支付的過程中,商戶app在后臺很可能被系統(tǒng)kill了,所以pay接口的callback就會失效,請商戶對standbyCallback返回的回調(diào)結(jié)果進(jìn)行處理,就是在這個方法里面處理跟callback一樣的邏輯】
}];

App支付iOS調(diào)用說明

快捷訂單支付iOS
處理客戶端返回url
回調(diào)接口
接口名稱:AlipaySDK

接口描述:提供支付功能。

Alipay接口主要為商戶提供訂單支付功能。接口所提供的方法,如下表所示:

方法名稱    方法描述
+(Alipay *)defaultService;  獲取服務(wù)實例。
-(void)payOrder:(NSString *)orderStr fromScheme:(NSString *)schemeStr callback:(CompletionBlock)completionBlock;    支付并通過回調(diào)返回結(jié)果。
-(void)processOrderWithPaymentResult:(NSURL*)resultUrl standbyCallback:(CompletionBlock)completionBlock;    處理支付寶客戶端返回的url(在app被殺模式下,通過這個方法獲取支付結(jié)果)。
快捷訂單支付iOS
方法名稱:pay方法

方法原型:(void)payOrder:(NSString *)orderStr fromScheme:(NSString *)schemeStr callback:(CompletionBlock)completionBlock;

方法功能:提供給商戶快捷訂單支付功能。

參數(shù)名稱    參數(shù)描述
NSString* scheme    商戶程序注冊的URL protocol,供支付完成后回調(diào)商戶程序使用。
(CompletionBlock)completionBlock    快捷支付開發(fā)包回調(diào)函數(shù),返回免登、支付結(jié)果。本地未安裝支付寶客戶端,或未成功調(diào)用支付寶客戶端進(jìn)行支付的情況下(走H5收銀臺),會通過該completionBlock返回支付結(jié)果。相應(yīng)的結(jié)果參考"客戶端同步返回"。
NSString* orderString   app支付請求參數(shù)字符串,主要包含商戶的訂單信息,key=value形式,以&連接。
orderStr示例如下,參數(shù)說明見"請求參數(shù)說明":
app_id=2015052600090779&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22seller_id%22%3A%22%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.02%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22314VYGIAGG7ZOYY%22%7D&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA&timestamp=2016-08-15%2012%3A12%3A15&version=1.0&sign=MsbylYkCzlfYLy9PeRwUUIg9nZPeN9SfXPNavUCroGKR5Kqvx0nEnd3eRmKxJuthNUx4ERCXe552EV9PfwexqW%2B1wbKOdYtDIb4%2B7PL3Pc94RZL0zKaWcaY3tSL89%2FuAVUsQuFqEJdhIukuKygrXucvejOUgTCfoUdwTi7z%2BZzQ%3D
處理客戶端返回url

方法名稱:處理客戶端方法

方法原型:-(void)processOrderWithPaymentResult:(NSURL*)resultUrl standbyCallback:(CompletionBlock)completionBlock;

方法功能:設(shè)備已安裝支付寶客戶端情況下,處理支付寶客戶端返回的url(在app被殺模式下,通過這個方法獲取支付結(jié)果)。

注意:該方法必須實現(xiàn),否則將會導(dǎo)致在安裝手機(jī)支付寶的情況下,支付結(jié)果無法正常同步返回。

參數(shù)名稱    參數(shù)描述
NSURL *resultUrl    支付寶客戶端回傳的url
CompletionBlock completionBlock 本地安裝了支付寶客戶端,且成功調(diào)用支付寶客戶端進(jìn)行支付的情況下,會通過該completionBlock返回支付結(jié)果
備注:請在APPDelegate的 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 中調(diào)用該方法,iOS9.0以上(包括iOS9.0)請在 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options 中調(diào)用該方法,具體可參見Demo。

回調(diào)接口

在支付過程結(jié)束后,會通過callbackBlock同步返回支付結(jié)果(callbackBlock是調(diào)用支付同步的回調(diào))。支付結(jié)果中參數(shù)的提取,必須通過CompletionBlock獲取,禁止開發(fā)者私自解析支付結(jié)果返回的URL,參數(shù)說明見"客戶端同步返回"。

其他接入方式

概述
對比
如果您已經(jīng)接入了手機(jī)網(wǎng)站支付,除了“集成流程詳解”中介紹的接入方式,支付寶推薦另一種更為便利的SDK接入方式——手機(jī)網(wǎng)站支付轉(zhuǎn)為Native支付。

概述

如果您已經(jīng)接入支付寶手機(jī)網(wǎng)站支付,可以通過接入我們的SDK將手機(jī)網(wǎng)站支付轉(zhuǎn)為Native支付。接入過程極其簡單,只需攔截手機(jī)網(wǎng)站支付的url,將該url轉(zhuǎn)交給SDK進(jìn)行處理;無需接入者解析參數(shù)字段,接入者的服務(wù)端也無需改造。

為什么要將手機(jī)網(wǎng)站支付轉(zhuǎn)為Native支付? Native支付的用戶體驗和支付成功率均優(yōu)于手機(jī)網(wǎng)站支付。

對比

下面以淘寶為例對比手機(jī)網(wǎng)站支付和手機(jī)網(wǎng)站轉(zhuǎn)Native支付的流程。

手機(jī)網(wǎng)站支付流程

步驟一: 在手機(jī)端瀏覽器中訪問淘寶主頁www.taobao.com


步驟二: 挑選商品并進(jìn)行付款


步驟三: 點(diǎn)擊“立即支付”進(jìn)入付款詳情頁面(H5頁面)


手機(jī)網(wǎng)站轉(zhuǎn)Native支付流程

下載Demo,并將Demo App安裝到手機(jī)上即可體驗該流程,請確保手機(jī)上安裝了支付寶App。

步驟一: 運(yùn)行Demo,并在Demo中打開淘寶主頁www.taobao.com
iOS: 點(diǎn)擊URLPay->openUrl,輸入www.taobao.com


Android: 點(diǎn)擊網(wǎng)頁支付轉(zhuǎn)native

步驟二: 挑選商品并進(jìn)行付款
iOS截圖



Android截圖


對比總結(jié)

主要區(qū)別是:如果用戶手機(jī)安裝了支付寶App,手機(jī)網(wǎng)站轉(zhuǎn)Native支付方式會跳轉(zhuǎn)到支付寶App中進(jìn)行訂單支付,用戶體驗和支付成功率均優(yōu)于手機(jī)網(wǎng)站支付方式。除此之外,還能使用手機(jī)網(wǎng)站支付沒有提供的功能,例如:指紋支付、手環(huán)、手表支付、免密支付等。

如果用戶手機(jī)沒有安裝支付寶App怎么辦? 如果用戶手機(jī)沒有安裝支付寶App,將在SDK提供的WebView中打開H5頁面進(jìn)行支付。即便如此,由于SDK與服務(wù)端的交互攜帶賬號信息,仍比不攜帶任何賬號信息的普通手機(jī)網(wǎng)站支付體驗更好。

如何實現(xiàn)手機(jī)網(wǎng)站轉(zhuǎn)Native支付

要實現(xiàn)上述功能需接入我們提供的SDK。

接入過程十分簡單,可以以上述Demo為參考,該Demo程序只有一個功能:創(chuàng)建一個WebView,在WebView中攔截每個URL,然后調(diào)用SDK提供的接口檢查該URL是否是有效的支付寶訂單支付URL,如果是則將該URL傳給SDK提供的支付接口進(jìn)行支付。

支付寶請求參數(shù)說明

接口功能:外部商戶App喚起快捷SDK創(chuàng)建訂單并支付。

請求參數(shù)是商戶在與支付寶進(jìn)行數(shù)據(jù)交互時,提供給支付寶的請求數(shù)據(jù),以便支付寶根據(jù)這些數(shù)據(jù)進(jìn)一步處理。

公共參數(shù) -- order

參數(shù) 類型 是否必填 最大長度 描述 示例值
app_id String 是 32 支付寶分配給開發(fā)者的應(yīng)用ID 2014072300007148
method String 是 128 接口名稱 alipay.trade.app.pay
format String 否 40 僅支持JSON JSON
charset String 是 10 請求使用的編碼格式,如utf-8,gbk,gb2312等 utf-8
sign_type String 是 10 商戶生成簽名字符串所使用的簽名算法類型,目前支持RSA RSA
sign String 是 256 商戶請求參數(shù)的簽名串,詳見簽名 詳見示例
timestamp String 是 19 發(fā)送請求的時間,格式"yyyy-MM-dd HH:mm:ss" 2014-07-24 03:07:50
version String 是 3 調(diào)用的接口版本,固定為:1.0 1.0
notify_url String 是 256 支付寶服務(wù)器主動通知商戶服務(wù)器里指定的頁面http/https路徑。建議商戶使用https https://api.xx.com/receive_notify.htm
biz_content String 是 - 業(yè)務(wù)請求參數(shù)的集合,最大長度不限,除公共參數(shù)外所有請求參數(shù)都必須放在這個參數(shù)中傳遞,具體參照各產(chǎn)品快速接入文檔

業(yè)務(wù)參數(shù) -- biz_content

參數(shù) 類型 是否必填 最大長度 描述 示例值
body String 否 128 對一筆交易的具體描述信息。如果是多種商品,請將商品描述字符串累加傳給body。 Iphone6 16G
subject String 是 256 商品的標(biāo)題/交易標(biāo)題/訂單標(biāo)題/訂單關(guān)鍵字等。 大樂透
out_trade_no String 是 64 商戶網(wǎng)站唯一訂單號 70501111111S001111119
timeout_express String 否 6 該筆訂單允許的最晚付款時間,逾期將關(guān)閉交易。取值范圍:1m~15d。m-分鐘,h-小時,d-天,1c-當(dāng)天(1c-當(dāng)天的情況下,無論交易何時創(chuàng)建,都在0點(diǎn)關(guān)閉)。 該參數(shù)數(shù)值不接受小數(shù)點(diǎn), 如 1.5h,可轉(zhuǎn)換為 90m。 90m
total_amount String 是 9 訂單總金額,單位為元,精確到小數(shù)點(diǎn)后兩位,取值范圍[0.01,100000000] 9.00
seller_id String 否 16 收款支付寶用戶ID。 如果該值為空,則默認(rèn)為商戶簽約賬號對應(yīng)的支付寶用戶ID 2088102147948060
product_code String 是 64 銷售產(chǎn)品碼,商家和支付寶簽約的產(chǎn)品碼 QUICK_MSECURITY_PAY
請求示例

請求參數(shù)組裝分下列3步,以最后第三步獲取到的請求為準(zhǔn)

  1. 請求參數(shù)按照key=value&key=value方式拼接的未簽名原始字符串:
app_id=2015052600090779&biz_content={"timeout_express":"30m","seller_id":"","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.01","subject":"1","body":"我是測試數(shù)據(jù)","out_trade_no":"IQJZSRC1YMQB5HU"}&charset=utf-8&format=json&method=alipay.trade.app.pay&notify_url=http://domain.merchant.com/payment_notify&sign_type=RSA&timestamp=2016-08-25 20:26:31&version=1.0
  1. 再對原始字符串進(jìn)行簽名,參考 簽名規(guī)則:
app_id=2015052600090779&biz_content={"timeout_express":"30m","seller_id":"","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.01","subject":"1","body":"我是測試數(shù)據(jù)","out_trade_no":"IQJZSRC1YMQB5HU"}&charset=utf-8&format=json&method=alipay.trade.app.pay&notify_url=http://domain.merchant.com/payment_notify&sign_type=RSA&timestamp=2016-08-25 20:26:31&version=1.0&sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj+y48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp/M45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g=
  1. 最后對請求字符串的所有一級value(biz_content作為一個value)進(jìn)行encode,編碼格式按請求串中的charset為準(zhǔn),沒傳charset按UTF-8處理,獲得最終的請求字符串:
app_id=2015052600090779&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22seller_id%22%3A%22%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22IQJZSRC1YMQB5HU%22%7D&charset=utf-8&format=json&method=alipay.trade.app.pay&notify_url=http%3A%2F%2Fdomain.merchant.com%2Fpayment_notify&sign_type=RSA&timestamp=2016-08-25%2020%3A26%3A31&version=1.0&sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj%2By48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp%2FM45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g%3D

特殊說明(很重要)

  1. 商戶在請求參數(shù)中,自己附屬的一些額外參數(shù),不要和支付寶系統(tǒng)中約定的key(下表中 公共請求參數(shù)\請求參數(shù))重名,否則將可能導(dǎo)致未知的異常。
    比如以下示例中app_id=2014072300007148******&version=1.0&biz_content的key是公共請求參數(shù),業(yè)務(wù)方自己的擴(kuò)展參數(shù)需要放在biz_content內(nèi)部,比如示例中tips屬性,很顯然下面total_amount屬性是商戶按照自己的業(yè)務(wù)屬性賦值的,但是由于total_amount也是支付寶關(guān)鍵key,支付寶將會認(rèn)為這個total_amount是支付寶業(yè)務(wù)的參數(shù)應(yīng)該是金額,這個最終將導(dǎo)致誤解析。下列請求串為了展示清晰,未進(jìn)行encode并且做了格式化處理,下同。
app_id=2014072300007148&charset=UTF-8&version=1.0&timestamp=2016-07-01 08:08:08&method=alipay.trade.wap.pay&notify_url=https://api.**.com/pay_receive_notify.html&sign_type=RSA&sign=ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE&version=1.0&biz_content=
  {
    "body":"對一筆交易的具體描述信息。如果是多種商品,請將商品描述字符串累加傳給body。",
    "subject":"大樂透",
    "out_trade_no":"70501111111S001111119",
    "timeout_express":"90m",
    "total_amount":"一共花費(fèi)了10元",
    "seller_id":"2088102147948060",
    "auth_token":"appopenBb64d181d0146481ab6a762c00714cC27",
    "product_code":"QUICK_MSECURITY_PAY",
    "tips":"測試一筆支付"
  }
  1. 商戶的請求參數(shù)中,所有的key(支付寶關(guān)鍵key或者商戶自己的key),其對應(yīng)的value中都不應(yīng)該出現(xiàn)支付寶關(guān)鍵key,否則該類交易將可能被支付寶攔截禁止支付。
    比如以下的請求中"subject":"大樂透 這個辣條不錯 out_trade_no=123 total_fee=123.5",其value值中有支付寶關(guān)鍵key"out_trade_no"、"total_fee",這樣的業(yè)務(wù)請求參數(shù)支付寶將會攔截。
app_id=2014072300007148&charset=UTF-8&version=1.0&timestamp=2016-07-01 08:08:08&method=alipay.trade.wap.pay&notify_url=https://api.**.com/pay_receive_notify.htm&sign_type=RSA&sign=ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE&version=1.0&biz_content=
  {
    "body":"對一筆交易的具體描述信息。如果是多種商品,請將商品描述字符串累加傳給body。",
    "subject":"大樂透 這個辣條不錯 out_trade_no=123 total_fee=123.5",
    "out_trade_no":"70501111111S001111119",
    "timeout_express":"90m",
    "total_amount":10.0,
    "seller_id":"2088102147948060",
    "auth_token":"appopenBb64d181d0146481ab6a762c00714cC27",
    "product_code":"QUICK_MSECURITY_PAY"
  }
  1. 商戶支付請求參數(shù)的安全注意點(diǎn):
    a)請求參數(shù)的sign字段請務(wù)必在服務(wù)端完成簽名生成(不要在客戶端本地簽名);
    b)支付請求中的訂單金額total_amount,請務(wù)必依賴服務(wù)端,不要輕信客戶端上行的數(shù)據(jù)(客戶端本地上行數(shù)據(jù)在用戶手機(jī)環(huán)境中無法確保一定安全)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內(nèi)容