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

以下內(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),比如:團(tuán)購券/衣服/電子商品等等.如果和應(yīng)用程序有關(guān),必須采用內(nèi)購,否則不允許上架,比如:會員/游戲道具等.

集成支付寶


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

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

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


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

集成支付寶


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

  • 向支付寶申請,與支付寶簽約,獲得商戶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的簡稱与学,用戶身份標(biāo)示。用于表示支付寶用戶的唯一標(biāo)示嘉抓。

  • PID:partner_id的簡稱索守,合作伙伴身份∫制可登錄開放平臺卵佛,點(diǎn)擊用戶名稱,選擇合作伙伴密鑰查看

Paste_Image.png
  • APPID:app_id,應(yīng)用身份標(biāo)示截汪〖采可登錄開放平臺,在“開放平臺-管理中心-應(yīng)用詳情”查看衙解。
Paste_Image.png
Paste_Image.png
  • RSA:RSA是一種公鑰加密算法阳柔。能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)蚓峦。主要用于公鑰加密私鑰解密舌剂、私鑰簽名公鑰驗(yàn)簽。
  • 支付寶公鑰:開發(fā)者請求支付寶并獲得返回時暑椰,開發(fā)者用于驗(yàn)簽使用的公鑰霍转,查看位置如下圖所示。
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;  //商品標(biāo)題
    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];
 
 //將簽名成功字符串格式化為訂單字符串,請嚴(yán)格按照該格式
 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)支付寶錢包進(jì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 *  返回碼角虫,標(biāo)識支付狀態(tài),含義如下:
9000——訂單支付成功
8000——正在處理中
4000——訂單支付失敗
5000——重復(fù)請求
6001——用戶中途取消
6002——網(wǎng)絡(luò)連接出錯

以上是支付寶支付所需要用到的,具體實(shí)現(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的時候一定要把截圖里面紅框框中的拖進(jìn)去
編譯后報錯

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)系作者
  • 序言:七十年代末委造,一起剝皮案震驚了整個濱河市戳鹅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昏兆,老刑警劉巖枫虏,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異爬虱,居然都是意外死亡隶债,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門跑筝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來死讹,“玉大人,你說我怎么就攤上這事曲梗≡蘧” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵虏两,是天一觀的道長愧旦。 經(jīng)常有香客問我,道長定罢,這世上最難降的妖魔是什么笤虫? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上琼蚯,老公的妹妹穿的比我還像新娘境蜕。我一直安慰自己,他們只是感情好凌停,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布粱年。 她就那樣靜靜地躺著,像睡著了一般罚拟。 火紅的嫁衣襯著肌膚如雪台诗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天赐俗,我揣著相機(jī)與錄音拉队,去河邊找鬼。 笑死阻逮,一個胖子當(dāng)著我的面吹牛粱快,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叔扼,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼事哭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瓜富?” 一聲冷哼從身側(cè)響起鳍咱,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎与柑,沒想到半個月后谤辜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡价捧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年丑念,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片结蟋。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡脯倚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出椎眯,到底是詐尸還是另有隱情挠将,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布编整,位于F島的核電站舔稀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏掌测。R本人自食惡果不足惜内贮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一产园、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夜郁,春花似錦什燕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至事富,卻和暖如春技俐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背统台。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工雕擂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贱勃。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓井赌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贵扰。 傳聞我的和親對象是個殘疾皇子仇穗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

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