三方支付之支付寶支付集成

以下內(nèi)容是我在做項目時遇到的一些小問題,主要是參考了阿里的官方文檔,也有在網(wǎng)上找到的一些內(nèi)容.主要是為了繼承使用,對阿里的SDK中的東西沒有做深入的討論,希望各位有什么問題了一起交流學(xué)習(xí)下,以下內(nèi)容全部是手打出來的,截圖是我現(xiàn)做的一個demo.大神勿噴.感謝那些無償分享技術(shù)的大牛們.

三方支付平臺說明(一些廢話,可以不用看的)


三方支付和內(nèi)購很像,內(nèi)購是用戶將錢付款給蘋果,之后蘋果分給商戶,而支付寶支付,是用戶將錢付款給支付寶,,之后支付寶將錢轉(zhuǎn)入到我們賬戶.
注意:使用三方支付是有前提的,購買的物品必須和應(yīng)用程序無關(guān),比如:團購券/衣服/電子商品等等.如果和應(yīng)用程序有關(guān),必須采用內(nèi)購,否則不允許上架,比如:會員/游戲道具等.

集成支付寶


使用支付寶進行一個完整的支付,大致有以下步驟:

  • 向支付寶申請,與支付寶簽約,獲得商戶ID(partner)和賬戶ID(seller)和私鑰(privateKey)
  • 下載支付寶SDK
  • 生成訂單信息,簽名加密
  • 條用支付寶客戶端,由支付寶客戶端跟支付寶安全服務(wù)器打交道.
  • 支付完畢后,支付寶客戶端會自動跳回到原來的應(yīng)用程序
  • 在原來的應(yīng)用程序中顯示支付結(jié)果給用戶看

三方支付平臺說明(一些廢話,可以不用看的)


三方支付和內(nèi)夠很像,內(nèi)購是用戶將錢付款給蘋果,之后蘋果分給商戶,而支付寶支付,是用戶將錢付款給支付寶,,之后支付寶將錢轉(zhuǎn)入到我們賬戶.
注意:使用三方支付是有前提的,購買的物品必須和應(yīng)用程序無關(guān),比如:團購券/衣服/電子商品等等.如果和應(yīng)用程序有關(guān),必須采用內(nèi)購,否則不允許上架,比如:會員/游戲道具等.

集成支付寶


使用支付寶進行一個完整的支付,大致有以下步驟:

  • 向支付寶申請,與支付寶簽約,獲得商戶ID(partner)和賬戶ID(seller)和私鑰(privateKey)
  • 下載支付寶SDK
  • 生成訂單信息,簽名加密
  • 條用支付寶客戶端,由支付寶客戶端跟支付寶安全服務(wù)器打交道.
  • 支付完畢后,支付寶客戶端會自動跳回到原來的應(yīng)用程序
  • 在原來的應(yīng)用程序中顯示支付結(jié)果給用戶看
    大概流程下圖所示:
Paste_Image.png

下面開始集成支付寶

集成前先介紹下支付寶的相關(guān)專業(yè)術(shù)語,方便理解(這些在支付寶的官網(wǎng)上都可以看到的)

  • API版本:支付寶網(wǎng)關(guān)分為兩大類。一類是在支付寶開放平臺建立之前就存在的商戶網(wǎng)關(guān),這類網(wǎng)關(guān)采用的訪問協(xié)議稱為1.0協(xié)議,協(xié)議參數(shù)中可區(qū)分的特征是需要傳入partner、service等參數(shù),以及請求網(wǎng)關(guān)為 https://mapi.alipay.com/gateway.do
    ,后簡稱mapi或API1.0;
    另外一類是隨開放平臺建立的開放網(wǎng)關(guān),主要服務(wù)于接入開放平臺的開放應(yīng)用。這類網(wǎng)關(guān)采用的訪問協(xié)議稱為2.0協(xié)議,協(xié)議參數(shù)中可區(qū)分的特征是需要傳入app_id、method、platform等參數(shù),以及請求網(wǎng)關(guān)為 https://openapi.alipay.com/gateway.do
    ,后簡稱openapi或API2.0。

  • UID:user_id的簡稱,用戶身份標示。用于表示支付寶用戶的唯一標示。

  • PID:partner_id的簡稱,合作伙伴身份。可登錄開放平臺,點擊用戶名稱,選擇合作伙伴密鑰查看

Paste_Image.png
  • APPID:app_id,應(yīng)用身份標示??傻卿涢_放平臺,在“開放平臺-管理中心-應(yīng)用詳情”查看。
Paste_Image.png
Paste_Image.png
  • RSA:RSA是一種公鑰加密算法。能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標準。主要用于公鑰加密私鑰解密、私鑰簽名公鑰驗簽。
  • 支付寶公鑰:開發(fā)者請求支付寶并獲得返回時,開發(fā)者用于驗簽使用的公鑰,查看位置如下圖所示。
Paste_Image.png

下載支付寶SDK

Paste_Image.png
  • 雙擊打開demo
Paste_Image.png
  • 具體支付代碼
    // 1.添加簽約后的 商戶ID/賬號ID/商戶方的私鑰
    NSString *partner = @"";
    NSString *seller = @"";
    NSString *privateKey = @"";
    // 2.生成訂單信息
    Order *order = [[Order alloc] init];
    order.partner = partner;            // 商戶ID
    order.seller = seller;              //  賬號ID
    order.tradeNO = nil;                //訂單ID(由商家自行制定)
    order.productName = product.title;  //商品標題
    order.productDescription = product.detail; //商品描述
    order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商品價格
    // 購買成功后的服務(wù)器的回調(diào)地址
    order.notifyURL =  @"http://www.xxx.com"; //回調(diào)URL

// 固定寫法
    order.service = @"mobile.securitypay.pay";
    order.paymentType = @"1";
    order.inputCharset = @"utf-8";
    order.itBPay = @"15m"; // 支付超時時間
    order.showUrl = @"m.alipay.com";
 //應(yīng)用注冊scheme,在AlixPayDemo-Info.plist定義URL types
 NSString *appScheme = @"appScheme"; // appScheme建議填寫成自己的bundle ID 
下面是截圖
Paste_Image.png
 //將商品信息拼接成字符串
 NSString *orderSpec = [order description];
 NSLog(@"orderSpec = %@",orderSpec);
 
 //獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode
 id<DataSigner> signer = CreateRSADataSigner(privateKey);
 NSString *signedString = [signer signString:orderSpec];
 
 //將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式
 NSString *orderString = nil;
 if (signedString != nil) {
  orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
                       orderSpec, signedString, @"RSA"];
        
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
        }];
    }
    // 支付接口類方法,喚起支付界面
+ (void)payOrder:(NSString *)orderStr fromScheme:(NSString *)schemeStr
 callback:(CompletionBlock)completionBlock

在appDelegate里面
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{

    if ([url.host isEqualToString:@"safepay"]) {
        //跳轉(zhuǎn)支付寶錢包進行支付,處理支付結(jié)果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            TFLog(@"result = %@",resultDic);  
            // 處理支付結(jié)果
        }];
    }
}

**返回值說明**
支付結(jié)束后SDK將回調(diào)completionBlock并將支付結(jié)果resultDic(NSDictionary *類型)作為參數(shù)傳入該Block。resultDic中主要包含兩個字段,如下所示:
resultCode  NSString *  返回碼,標識支付狀態(tài),含義如下:
9000——訂單支付成功
8000——正在處理中
4000——訂單支付失敗
5000——重復(fù)請求
6001——用戶中途取消
6002——網(wǎng)絡(luò)連接出錯

以上是支付寶支付所需要用到的,具體實現(xiàn)的時候,還有一些坑需要注意.

首先把支付寶的SDK集成到自己的項目中

Paste_Image.png

把SDK拖拽到自己項目中一定要注意,如果你們公司是用svn管理的,里面的靜態(tài)庫libcrypto.a和libssl.a要用命令行添加到svn的管理下

Paste_Image.png
  • 首先添加上依賴庫,阿里給的官網(wǎng)文檔依賴庫截圖是這樣的:
Paste_Image.png

按照官網(wǎng)文檔添加依賴庫,添加完成后還是報錯
拖拽SDK的時候一定要把截圖里面紅框框中的拖進去
編譯后報錯

Paste_Image.png

查看報錯原因,你會發(fā)現(xiàn)原來是文件Base64.h和openssl_wrapper.h中沒有導(dǎo)入#import <Foundation/Foundation.h> 框架,阿里的demo是在.pch里添加的,分別在這兩個文件中導(dǎo)入Foundation頭文件就可以了.再次編譯,還是報錯,最大的坑來了

Paste_Image.png

openssl/asn1.h file not found

Paste_Image.png

再次編譯,接著報錯,所有的操作都是按照阿里的文檔操作的.最后發(fā)現(xiàn)還是依賴庫的問題

Paste_Image.png

缺少libc++.tbd這個庫

Paste_Image.png

缺少CoreMotion.framework這個庫

Paste_Image.png

缺少libz.tbd這個庫


Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容