iOS 支付寶SDK接入詳解

一,在支付寶開放平臺下載支付寶SDK(https://openhome.alipay.com/platform/document.htm#down)

https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.HpDuWo&treeId=54&articleId=104509&docType=1

二,添加sdk文件到xcode

  1,新建一個aliPaySDK文件夾,提取SDK包中以下文件到此文件夾里,在xcode中添加此文件夾。

? ? ? ?技術分享

  2.在xcode中,點擊項目名,選擇"target"->"Link Binary With Libraries"添加依賴庫。  

技術分享

  3.編譯項目,會出現以下問題:

  1)"Unknown type name ‘NSString‘ "或者"Unknown type name ‘NSData‘ "等不識別常見類的問題。

  技術分享

  這是因為缺少Foundation類庫和UIKit類庫,支付寶Demo中之所以沒有出現此錯誤,是因為在.pch文件中導入過這些類庫

  解決辦法:只需要在出現錯誤的文件中導入這些類庫即可

  技術分享

  2)‘openssl/asn1.h‘ file not found

  技術分享

  這是openssl文件夾頭文件鏈接問題,如果openssl文件夾隨意拉進項目中,即使添加頭文件鏈接,也可能解決不了此問題,

  這也是問什么一開始就將所需要的文件放到一個新建文件夾中再添加到項目中的原因。

  解決辦法:Targets->Build Settings->Header Search Path中添加1中建立的aliPaySDK文件夾的路徑(拖拽此文件夾至輸入框即可)

  技術分享

  3)根據項目需求添加demo中ViewController中的代碼 編譯后可能會出下面錯誤:

  "_OBJC_CLASS_$_Product", referenced from:?objc-class-ref in ViewController.o

  技術分享

  AlipaySDK的demo中將Product的定義寫在了ViewControler.h中所致

  技術分享

  解決辦法:新建Product類,將ViewController中的代碼拷貝過去即可。

  技術分享

三,添加支付邏輯代碼,完成支付過程。

  ViewController.m文件

 1 /*============================================================================*/
 2     /*=======================需要填寫商戶app申請的===================================*/
 3     /*============================================================================*/
 4     //這里的三個參數是公司和支付寶簽約之后得到的,沒有這三個參數無法完成支付
 5     NSString *partner = @"";
 6     NSString *seller = @"";
 7     NSString *privateKey = @"";
 8     /*============================================================================*/
 9     /*============================================================================*/
10     /*============================================================================*/
11     
12     //partner和seller獲取失敗,提示
13     if ([partner length] == 0 ||
14         [seller length] == 0 ||
15         [privateKey length] == 0)
16     {
17         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
18                                                         message:@"缺少partner或者seller或者私鑰。"
19                                                        delegate:self
20                                               cancelButtonTitle:@"確定"
21                                               otherButtonTitles:nil];
22         [alert show];
23         return;
24     }
25     
26     /*
27      *生成訂單信息及簽名
28      */
29     //將商品信息賦予AlixPayOrder的成員變量
30     Order *order = [[Order alloc] init];
31     order.partner = partner;
32     order.seller = seller;
33 #warning 這里需要填商品信息
34     order.tradeNO = @""; //訂單ID(由商家自行制定)
35     order.productName = @"測試商品"; //商品標題
36     order.productDescription = @"這是一個測試商品"; //商品描述
37     order.amount = @"0.01"; //商品價格
38     order.notifyURL = @""; //回調URL   這個URL是在支付之后,支付寶通知后臺服務器,使數據同步更新,必須填,不然支付無法成功
39     
40     //下面的參數是固定的,不需要改變
41     order.service = @"mobile.securitypay.pay";
42     order.paymentType = @"1";
43     order.inputCharset = @"utf-8";
44     order.itBPay = @"30m";
45     order.showUrl = @"m.alipay.com";
46 
47     //應用注冊scheme,在AlixPayDemo-Info.plist定義URL types
48     //如果不知道scheme是神馬東西,請自行百度
49     NSString *appScheme = @"";
50     
51     //將商品信息拼接成字符串
52     NSString *orderSpec = [order description];
53     
54     //獲取私鑰并將商戶信息簽名,外部商戶可以根據情況存放私鑰和簽名,只需要遵循RSA簽名規范,并將簽名字符串base64編碼和UrlEncode
55     id<DataSigner> signer = CreateRSADataSigner(privateKey);
56     NSString *signedString = [signer signString:orderSpec];
57     
58     //將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式
59     NSString *orderString = nil;
60     if (signedString != nil) {
61         orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
62                        orderSpec, signedString, @"RSA"];
63         
64         
65         [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
66             NSLog(@"使用支付寶的支付結果 %@",resultDic);
67             
68         }];
69         
70     }

AppDelegate.m

 1 - (BOOL)application:(UIApplication *)application
 2             openURL:(NSURL *)url
 3   sourceApplication:(NSString *)sourceApplication
 4          annotation:(id)annotation {
 5     
 6      //跳轉支付寶錢包進行支付,處理支付結果
 7       [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
 8                     NSLog(@"result = %@",resultDic);
 9         }];
10     
11     return YES;
12 }

以上就是支付寶集成流程和可能遇到的問題。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247898.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247898.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247898.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面試基本知識點

文章目錄面-什么是SEO面 - cookie / localstorage / sessionstorage的區別面 - promise面試題面 - 柯里化函數面 - 函數節流面 - 函數防抖HTML / CSS 知識點1、講講盒模型&#xff08;螞蟻金服 2019.03 招行信用卡 2019.04 美團 作業幫&#xff09;2、根據盒模型解釋邊距重疊&a…

Redis 熱點key

壓測報redis 熱點問題 熱點問題概述 產生原因 熱點問題產生的原因大致有以下兩種&#xff1a; 用戶消費的數據遠大于生產的數據&#xff08;熱賣商品、熱點新聞、熱點評論、明星直播&#xff09;。 在日常工作生活中一些突發的的事件&#xff0c;例如&#xff1a;雙十一期間某些…

移動IM開發那些事:技術選型和常見問題

最近在做一個iOS IM SDK&#xff0c;在內部試用的階段&#xff0c;不斷有兄弟部門或者合作伙伴過來問各種技術細節&#xff0c;所以統一寫一篇文章記錄&#xff0c;統一介紹下一個IM APP的方方面面&#xff0c;包括技術選型(包括通訊方式,網絡連接方式,協議選擇)和常見問題。 …

webstrom打開通過頂部瀏覽器打開網頁,被跳轉到默認主頁

重新開始工作啦&#xff0c;希望以后認真一點&#xff0c;并把遇到的問題都記錄下來&#xff0c;雖然是小小白&#xff0c;但能無意間幫助到別人就更開心了呀 通過webstrom打開本地的文件時&#xff0c;發現跳轉到了默認主頁上&#xff0c;吐槽下&#xff0c;有些主頁真的超級流…

mockjs(接口服務代理)

mock官網&#xff1a;http://mockjs.com/ 一、搭建一個練習項目 1.利用vue的項目腳手架進行搭建 命令&#xff1a; vue create mock-demo 截圖&#xff1a; 2.安裝相關的依賴 命令&#xff1a; #使用 axios 發送 ajax npm install axios --save #使用 mock.js 產生隨機數據…

MD5算法原理

MD5&#xff08;單向散列算法&#xff09; 的全稱是Message-Digest Algorithm 5&#xff08;信息-摘要算法&#xff09;&#xff0c;經MD2、MD3和MD4發展而來。MD5算法的使用不需要支付任何版權費用。MD5功能&#xff1a;輸入任意長度的信息&#xff0c;經過處理&#xff0c;輸…

函數-函數進階-裝飾器流程分析

老王&#xff1a;算了&#xff0c;估計你也想不出來。。。學過嵌套函數沒有&#xff1f; 你&#xff1a;yes&#xff0c;然后呢&#xff1f; 老王&#xff1a;想實現一開始你寫的america login(america)不觸發你函數的執行&#xff0c;只需要在這個login里面再定義一層函數&am…

制作手寫簽名

<!DOCTYPE html> <!-- saved from url(0056)http://hao2013.cn/canvas-special-master/brush/index.html --> <html><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><title>簽名板(支持移動…

python第五次作業——陳靈院

習題1&#xff1a;讀入文件pmi_days.csv&#xff0c;完成以下操作&#xff1a;1.統計質量等級對應的天數&#xff0c;例如&#xff1a;優&#xff1a;5天良&#xff1a;3天中度污染&#xff1a;2天2.找出PMI2.5的最大值和最小值&#xff0c;分別指出是哪一天。 import csv impo…

iOS 二叉樹相關算法實現

什么是二叉樹&#xff1f; 在計算機科學中&#xff0c;二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”和“右子樹”&#xff0c;左子樹和右子樹同時也是二叉樹。二叉樹的子樹有左右之分&#xff0c;并且次序不能任意顛倒。二叉樹是遞歸定義的&#xff0c;所…

vux 組件庫首次使用安裝

1、首先通過腳手架新建一個項目&#xff0c;過程略。 創建完項目后&#xff0c;在項目里安裝vux&#xff0c; 通過命令 npm install vux --save 安裝 2、安裝vux-loader&#xff0c; 通過命令 npm install vux-loader --save-dev 安裝&#xff08;vux文檔沒說明&#xff09; 3、…

@Component 和 @Bean 的區別

Spring幫助我們管理Bean分為兩個部分&#xff0c;一個是注冊Bean&#xff0c;一個裝配Bean。完成這兩個動作有三種方式&#xff0c;一種是使用自動配置的方式、一種是使用JavaConfig的方式&#xff0c;一種就是使用XML配置的方式。 Compent 作用就相當于 XML配置 Component pub…

js動態驗證碼獲取

<!DOCTYPE html> <html lang"cn"> <head><meta charset"UTF-8"><title>短信驗證碼</title> </head> <body> <input type"number" id"tel" value"13303861063"> <…

Base64 算法原理,以及編碼、解碼【加密、解密】 介紹

Base64編碼&#xff0c;是我們程序開發中經常使用到的編碼方法。它是一種基于用64個可打印字符來表示二進制數據的表示方法。它通常用作存儲、傳輸一些二進制數據編碼方法&#xff01;也是MIME&#xff08;多用途互聯網郵件擴展&#xff0c;主要用作電子郵件標準&#xff09;中…

js通過身份證獲取年齡

// 獲取用戶的身份證號碼let identityCard this.idNum.replace(/\s/g, "");//判斷長度let len identityCard.length;//設置新的變量var strBirthday "";//根據長度獲取年月日if (len 18) {strBirthday identityCard.substr(6, 4) "/" identi…

爬取豆瓣top250

#xpath #第一種方法 可在開發者工具中找到標簽&#xff0c;右鍵copy xpath&#xff0c;有時需去掉tbody標簽 #第二種方法 簡單學習xpath&#xff0c;自己書寫&#xff0c;掌握基本語法即可&#xff0c;簡單的層級關系#先將csv文件以記事本打開&#xff0c;更改編碼為ASNI&…

TCP/IP,Http,Socket,XMPP的區別

網絡由下往上分為 物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。 通過初步的了解&#xff0c;我知道IP協議對應于網絡層&#xff0c;TCP協議對應于傳輸層&#xff0c;而HTTP協議對應于應用層&#xff0c; 三者從本質上來說沒有可比性&#xff0c; socket則是對…

LED音樂頻譜之點陣

轉載請注明出處&#xff1a;http://blog.csdn.net/ruoyunliufeng/article/details/37967455 一.硬件 這里的LED選擇直插的霧面LED&#xff0c;亮度可以還不失美觀。注意每行要加上限流電阻。74HC138&#xff08;三八譯碼器&#xff09;作為列選&#xff0c;每行都連著74HC595&a…

上架相關——App Store 上架流程

說實話&#xff0c;公司要上架一個自己做的一個小項目。為了完成這個任務&#xff0c;菜鳥的我一遍找資料一遍跟著做&#xff0c;一遍修改錯誤一遍查找解決方案。網上的資料大部分都是2015年以前的資料&#xff0c;資料有點不夠過時&#xff0c;而且步驟配圖也不是很詳細&#…

this.$router 的三種跳轉頁面方法

第一種&#xff1a; this.$router.push(需要跳轉到的路徑名稱)此方法跳轉后&#xff0c;會在歷史欄目中保存路勁地址&#xff0c;當點擊歷史標簽時可以進行訪問 第二種&#xff1a; this.$router.replace(需要跳轉到的路徑名稱)此方法跳轉后&#xff0c;會在歷史欄目中不保存…