日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

iOS开发技术之银联支付

發(fā)布時(shí)間:2023/12/31 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 iOS开发技术之银联支付 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

p.p1 { margin: 0; font: 24px "PingFang SC"; color: rgba(51, 51, 51, 1) }
p.p2 { margin: 0; font: 14px "PingFang SC"; color: rgba(0, 0, 0, 1) }
p.p3 { margin: 0 0 10px; font: 16px "Helvetica Neue"; color: rgba(47, 47, 47, 1) }
p.p4 { margin: 0; font: 14px "PingFang SC"; color: rgba(0, 0, 0, 1); min-height: 20px }
p.p5 { margin: 0; font: 14px "Microsoft YaHei"; color: rgba(0, 0, 0, 1) }
p.p6 { margin: 0; font: 14px "PingFang SC"; color: rgba(0, 0, 0, 1) }
p.p7 { margin: 0; font: 16px "Helvetica Neue"; color: rgba(0, 0, 0, 1); min-height: 18px }
p.p8 { margin: 0; font: 14px "Microsoft YaHei"; color: rgba(0, 0, 0, 1) }
p.p9 { margin: 0; font: 14px "PingFang SC"; color: rgba(0, 0, 0, 1); min-height: 20px }
p.p10 { margin: 0; font: 14px "PingFang SC"; color: rgba(0, 0, 0, 1) }
p.p11 { margin: 0; font: 14px "PingFang SC"; color: rgba(0, 0, 0, 1); min-height: 20px }
span.s1 { font-kerning: none }
span.s2 { font: 16px "Helvetica Neue"; font-kerning: none; color: rgba(47, 47, 47, 1) }
span.s3 { font: 14px "PingFang SC"; font-kerning: none }
span.s4 { font: 14px "Microsoft YaHei"; font-kerning: none }
span.s5 { font: 14px "PingFang SC"; font-kerning: none; color: rgba(0, 0, 0, 1) }

一、集成銀聯(lián)SDK步驟:

1、查看開(kāi)發(fā)文檔

https://open.unionpay.com/ajweb/index

2、下載SDK

https://open.unionpay.com/ajweb/help/file/techFile?productId=3

3、支付流程說(shuō)明:

  (1)用戶(hù)在客戶(hù)端中點(diǎn)擊購(gòu)買(mǎi)商品,客戶(hù)端發(fā)起訂單生成請(qǐng)求到商戶(hù)后臺(tái);

  (2)商戶(hù)后臺(tái)收到訂單生成請(qǐng)求后,按照《手機(jī)控件支付產(chǎn)品接口規(guī)范》組織并推送訂單信息至銀聯(lián)后臺(tái);

  (3)銀聯(lián)后臺(tái)接收訂單信息并檢查通過(guò)后,生成對(duì)應(yīng)交易流水號(hào)(即TN),并回復(fù)至商戶(hù)后臺(tái)(應(yīng)答要素:交易流水號(hào)等);

  (4)商戶(hù)后臺(tái)接收到交易流水號(hào)(TN),將交易流水號(hào)返回至客戶(hù)端;

  (5)客戶(hù)端通過(guò)交易流水號(hào)(TN)調(diào)用支付控件;

  (6)用戶(hù)在支付控件中輸入相關(guān)支付信息后,由支付控件向銀聯(lián)后臺(tái)發(fā)起支付請(qǐng)求;

  (7)支付成功后,銀聯(lián)后臺(tái)將支付結(jié)果通知給商戶(hù)后臺(tái);

  (8)銀聯(lián)后臺(tái)同時(shí)也將支付結(jié)果通知支付控件;

  (9)支付控件顯示支付結(jié)果并將支付結(jié)果返回至客戶(hù)端;

  此處備注:我們是通過(guò)后臺(tái)獲取訂單,我們可以根據(jù)商品id等信息通過(guò)后臺(tái)接口獲取訂單信息,對(duì)訂單支付流程的簽名加密過(guò)程后臺(tái)完成。

4、添加SDK包

  使用UPPaymentControl需要將paymentcontrol/inc目錄下UPPaymentControl.h文件和paymentcontrol/libs目錄下的libPaymentControl.a文件添加到商戶(hù)應(yīng)用的工程中

5、添加系統(tǒng)庫(kù)和工程配置

  a.http請(qǐng)求設(shè)置

  在Xcode的版本中進(jìn)行http請(qǐng)求時(shí),需要在工程對(duì)應(yīng)的plist文件中添加NSAppTransportSecurity Dictionary 并同時(shí)設(shè)置里面NSAllowsArbitraryLoads 屬性值為YES

  b.使用UPPaymentControl需要添加

CFNetwork.framework、SystemConfiguration.framework 、libz、libPaymentControl.a到工程中.

  c.在工程info.plist設(shè)置中添加一個(gè)URL Types回調(diào)協(xié)議(在UPPayDemo工程中使用“UPPayDemo”作為協(xié)議),用于在支付完成后返回商戶(hù)客戶(hù)端。

d.添加協(xié)議白名單

  在Xcode7.0之后的版本中進(jìn)行開(kāi)發(fā),需要在工程對(duì)應(yīng)的plist文件中,添加LSApplicationQueriesSchemes Array并加入uppaysdk、uppaywallet、uppayx1、uppayx2、uppayx3五個(gè)item

6、加-ObjC宏

  選擇工程targets——》build settings ->Linking->other linker flags

7、調(diào)用插件

  在需要調(diào)用支付控件接口的代碼文件內(nèi)引用頭文件UPPaymentControl.h。

  (注意:如果工程的compile source as 選項(xiàng)的值不是Objective–C++,則引用此頭文件的文件類(lèi)型都要改為.mm)

  商戶(hù)App從商戶(hù)服務(wù)器獲取tn(注:先通過(guò)調(diào)用后臺(tái)接口獲取訂單信息)

  * @param tn 訂單信息

  * @param schemeStr 調(diào)用支付的app注冊(cè)在info.plist中的scheme

  * @param mode 支付環(huán)境"00"代表接入生產(chǎn)環(huán)境(正式版本需要);"01"代表接入開(kāi)發(fā)測(cè)試環(huán)境

  * @param viewController 啟動(dòng)支付控件的viewController

  * @return 返回成功失敗

//當(dāng)獲得的tn不為空時(shí),調(diào)用支付接口 if (tn != nil && tn.length > 0) {

[[UPPaymentControl defaultControl] startPay:tn fromScheme:@"UPPay" mode:self.tnMode viewController:self];

}

if([[UPPaymentControl defaultControl] isPaymentAppInstalled])

{

//當(dāng)判斷用戶(hù)手機(jī)上已安裝銀聯(lián)App,商戶(hù)客戶(hù)端可以做相應(yīng)個(gè)性化處理

}

8、返回結(jié)果接口調(diào)用

  支付控件結(jié)果處理函數(shù)handlePaymentResult: completeBlock:需要在工程AppDelegate文件的application: openURL: sourceApplication: annotation: 方法中進(jìn)行調(diào)用。

  支付控件結(jié)果處理函數(shù)handlePaymentResult: completeBlock:包含兩個(gè)參數(shù),參數(shù)1url為支付結(jié)果串,由handlePaymentResult: completeBlock:方法解析url內(nèi)容;參數(shù)2completionBlock為商戶(hù)APP定義的結(jié)果處理方法,包含兩個(gè)傳入?yún)?shù)code和data,其中code表示支付結(jié)果,取值為suceess,fail,cancel分別表示支付成功、支付失敗和支付取消,data表示結(jié)果簽名數(shù)據(jù),商戶(hù)使用銀聯(lián)公鑰驗(yàn)證結(jié)果真實(shí)性。

  completeBlock中的NSDictionary *data結(jié)構(gòu)如下:

  sign —— 簽名后做Base64的數(shù)據(jù)

  data —— 用于簽名的原始數(shù)據(jù),結(jié)構(gòu)如下:

  pay_result —— 支付結(jié)果success,fail,cancel

  tn —— 訂單號(hào)

  Data轉(zhuǎn)換為String后的示例如下:

  "{"sign":"ZnZY4nqFGu/ugcXNIhniJh6UDVriWANlHtIDRzV9w120E6tUgpL9Z7jIFzWrSV73hmrkk8BZMXMc/9b8u3Ex1ugnZn0OZtWfMZk2I979dxp2MmOB+1N+Zxf8iHr7KNhf9xb+VZdEydn3Wc/xX/B4jncg0AwDJO/0pezhSZqdhSivTEoxq7KQTq2KaHJmNotPzBatWI5Ta7Ka2l/fKUv8zr6DGu3/5UaPqHhnUq1IwgxEWOYxGWQgtyTMo/tDIRx0OlXOm4iOEcnA9DWGT5hXTT3nONkRFuOSyqS5Rzc26gQE6boD+wkdUZTy55ns8cDCdaPajMrnuEByZCs70yvSgA==","data":"pay_result=success&tn=201512151321481233778"}"

  對(duì)于新增的簽名信息需注意以下幾點(diǎn):

  1. 前臺(tái)返回的支付結(jié)果中包含銀聯(lián)簽名,要在商戶(hù)后臺(tái)對(duì)簽名進(jìn)行校驗(yàn)后才能展示結(jié)果。

  2. 前臺(tái)簽名使用的密鑰和算法與后臺(tái)結(jié)果中的簽名一致。

  3. 如果商戶(hù)APP在客戶(hù)端內(nèi)進(jìn)行簽名驗(yàn)證,要自行實(shí)現(xiàn)簽名密鑰更新的機(jī)制,否則更換密鑰后會(huì)導(dǎo)致驗(yàn)簽失敗。(不推薦)

  4. 商戶(hù)訂單是否成功支付應(yīng)該以商戶(hù)后臺(tái)收到全渠道返回的支付結(jié)果為準(zhǔn),此處支付控件返回的結(jié)果僅作為參考。

二、注意事項(xiàng):

1、編譯時(shí)提示Undefined for architecture XXX 錯(cuò)誤

  1)由于支付控件使用到了C、C++和OC混編的情況,所以商戶(hù)工程引入U(xiǎn)PPaymentControl.h頭文件以后可能會(huì)出現(xiàn)鏈接錯(cuò)誤,這個(gè)時(shí)候可以通過(guò)以下三種方式解決:

  ① 將涉及到引用UPPaymentControl.h的源文件的后綴名都改為.mm;

  ② 如果商戶(hù)不想修改源文件的后綴名,可以在工程中添加一個(gè)空的繼承自NSObject的類(lèi),并將文件.m后綴名該改為.mm即可方法為new file->Objective-Cclass->類(lèi)名自取->保存->修改后綴名為.mm;

  ③ 將工程的compile source as 選項(xiàng)的值設(shè)置為Objective–C++;

  2)由于在UPPayDemo工程中添加了自定義的庫(kù)文件libPaymentControl.a

  ,當(dāng)編譯Demo工程時(shí),應(yīng)該檢查工程設(shè)置Search Paths里的Framework Search Paths、Header Search Paths、Library Search Paths的路徑設(shè)置,看設(shè)置路徑是否正確,另外還要注意里邊是否多余一些不確定的路徑。

  3) 將xcode工程中Build Setting -> Apple LLVM compiler Language 標(biāo)簽下的C++ Language Dialect 和 C++ Standard Library 屬性值修改為 Compiler Default如實(shí)在無(wú)法解決,嘗試添加-ObjC宏的地方修改為 -force_load+空格+控件路徑,如:-force_load $(PROJECT_DIR)/ libPaymentControl.a,如果還報(bào)錯(cuò),上下文應(yīng)該會(huì)有l(wèi)ibPaymentControl.a文件找不到異常,比如ld: file not found: /Users/apple/Desktop/Communication 2/ libPaymentControl.a

  clang: error: linker command failed with exit code 1 (use -v to see invocation)

  請(qǐng)確定libPaymentControl.a文件確實(shí)存在于此路徑,可能為上下文路徑配錯(cuò)。

2、控件閃退異常'NSInvalidArgumentException', reason: '-[__NSCFConstantString newSizeWithFont:詳略]'

  出現(xiàn)以上問(wèn)題是由于添加-ObjC宏的地方?jīng)]有配置正確,如果配-ObjC實(shí)在解決不了的話(huà),可嘗試去掉-ObjC,改為-force_load+空格+控件路徑,如:-force_load $(PROJECT_DIR)/ libPaymentControl.a。

3、orientation異常

  詳細(xì)現(xiàn)象為控件崩潰,報(bào)錯(cuò)信息:Terminating app due to uncaught exception ‘UIApplicationInvalidInterfaceOrientation’, reason: ‘Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES’ 請(qǐng)勿修改橫豎屏配置,iphone控件只能豎屏,ipad控件才支持橫豎屏。如果app本身為橫屏,請(qǐng)代碼控制橫豎屏,勿修改配置。

4、其他第三方靜態(tài)庫(kù)(如支付寶、微信等)的文件產(chǎn)生沖突duplicate symbols for architecture XXX

  請(qǐng)嘗試將添加-ObjC宏的地方修改為 -force_load+空格+控件路徑,如:-force_load $(PROJECT_DIR)/ libPaymentControl.a,這樣做不會(huì)影響支付寶等其他支付渠道功能。

5、控件界面無(wú)限加載

  1. 調(diào)用控件的邏輯應(yīng)當(dāng)在主線(xiàn)程中執(zhí)行,子線(xiàn)程中盡量不要進(jìn)行UI操作,無(wú)限加載等待實(shí)際是子線(xiàn)程死鎖所致。2. 請(qǐng)參考控件使用指南ios“添加SDK包“里“添加-ObjC宏”,特別注意大小寫(xiě)不要弄混。(此步驟操作有問(wèn)題時(shí)也可修改為 -force_load+空格+控件路徑,如:-force_load $(PROJECT_DIR)/ libPaymentControl.a)。3. Build Setting -> Apple LLVM compiler Language-C++

總結(jié)

以上是生活随笔為你收集整理的iOS开发技术之银联支付的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。