搜尋
首頁微信小程式微信開發詳解iOS微信支付開發案例代碼

詳解iOS微信支付開發案例代碼

Mar 27, 2017 pm 01:30 PM
ios微信支付

這篇文章主要為大家詳細介紹了iOS微信支付開發案例,具有一定的參考價值,有興趣的小伙伴們可以參考一下

微信支付有很多坑的,官方提供的文檔一點都不全面,而且demo也比較」羞澀」難懂。很多注意的細節都沒有反映出來,走了很多彎路。於是,系統的開發流程如下。 (完整的demo附在部落格最後面)這裡麵包括微信支付開發和支付寶開發呼叫客戶端的兼容處理。 (兩次簽章放在行動端,部落格中沒提到沒安裝微信客戶端的情況,也很簡單[WXApi sendReq:request]呼叫這個方法的回傳值為0即可判斷。)

#一、環境配置

1、先是https協議訪問,在plist設定白名單

詳解iOS微信支付開發案例代碼

2、當你工程有微信分享、收藏、付款、登入等,需要在「Info.plist」裡增加以下程式碼(LSApplicationQueriesSchemes)

詳解iOS微信支付開發案例代碼

3、解決bitcode編譯不過問題

詳解iOS微信支付開發案例代碼

4、設定URL types

詳解iOS微信支付開發案例代碼

#5、導入SDK(可從微信官方的demo移植過來)

詳解iOS微信支付開發案例代碼

#6、導入系統依賴函式​​庫

詳解iOS微信支付開發案例代碼

#7、特別要注意的是

微信支付是以分為單位的,也就是說,如果你支付金額是保留兩位小數,支付的金額必須*100後再傳給微信支付平台,其他的依次類推。

二、程式碼開發

1、程式入口(即applegate.m)需要進行的操作

詳解iOS微信支付開發案例代碼

2、增加如下代理方法,否則不回調微信客服端(也是在delegate.m檔)

詳解iOS微信支付開發案例代碼

#3、微信支付成功的回呼函數

這個有必要說明下,官方文件是這樣說明的:不能以客服端支付成功的結果就直接當做是訂單支付成功的結果,要以服務器返回的訂單狀態為準,也就是說,客服端支付成功後,微信支付平台會傳送付款成功的訊息,後台修改訂單狀態,重新回傳給客戶端。簡單就是,支付成功要傳送給特定的視圖控制器(具有微信支付功能的視圖控制器)發送通知,讓這個特定的視圖控制去請求伺服器訂單的住狀態。 這個回呼函數必須寫在delegate.m中!!!

詳解iOS微信支付開發案例代碼

4、特定視圖控制器的代碼(具有微信支付功能的視圖控制器)
4.1 提交預付訂單獲得預訂單id(這個過程必須經過兩次簽名,分別是不帶參數簽名和攜帶參數簽名,當然,這些方法都已經在payRequsestHandler類別封裝好了,你只需要傳參數呼叫方法就可以了)這個也是點擊支付按鈕的動作方法

詳解iOS微信支付開發案例代碼

4.2得到預付訂單,那麼就可以調微信支付的客服端(4.2和4.1代碼是連續的)

詳解iOS微信支付開發案例代碼

附帶sign參數簽名的獨立封裝的兩個方法,沒用payRequsestHandler封裝的方法,自己寫的,因為用了出現問題(問題截圖如下),先代碼截圖,後面再提供可直接複製粘貼的代碼塊
問題截圖:(相信很多人遇到過,100%是sign簽章的問題)

詳解iOS微信支付開發案例代碼 

#方法一:

詳解iOS微信支付開發案例代碼 

方法二:

詳解iOS微信支付開發案例代碼

4.3 上面的程式碼就可以完全解決微信支付問題,剩下最後一個步驟,支付成功返回app調用delegate的-(void)onResp:(BaseResp*)resp方法,那麼這裡要傳送通知給特定的視圖控制器,讓他去請求後台的訂單狀態。這裡要說明的是,你從那個介面調的微信付款後,回來還是在原處。只是回調方法必須在delegate中,所以必須在回呼方法發送成功的通知。那麼要在特定的視圖控制器的視圖即將出現的方法中,監聽到這個通知,然後請求後台的訂單狀態。這裡要注意的是,需要重寫dealloc方法,移除通知。

詳解iOS微信支付開發案例代碼

三、支付寶和微信支付的回呼客戶端的代理方法的相容處理

詳解iOS微信支付開發案例代碼

四、demo

可複製貼上的程式碼(sign簽名)

-(NSString )createMD5SingForPay:(NSString )appid_key partnerid:(NSString)partnerid_key prepayid:(NSString )prepayid_key package:(NSString )package_key noncestr:(NSString)noncestr_key timestamp:(UInt32)timestamp_key 
{ 
NSMutableDictionary *signParams = [NSMutableDictionary dictionary]; 
[signParams setObject:appid_key forKey:@”appid”]; 
[signParams setObject:noncestr_key forKey:@”noncestr”]; 
[signParams setObject:package_key forKey:@”package”]; 
[signParams setObject:partnerid_key forKey:@”partnerid”]; 
[signParams setObject:prepayid_key forKey:@”prepayid”]; 
[signParams setObject:[NSString stringWithFormat:@”%u”,(unsigned int)timestamp_key] forKey:@”timestamp”];
NSMutableString *contentString =[NSMutableString string]; 
NSArray *keys = [signParams allKeys]; 
//按字母顺序排序 
NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2 options:NSNumericSearch]; 
}]; 
//拼接字符串 
for (NSString *categoryId in sortedArray) { 
if ( ![[signParams objectForKey:categoryId] isEqualToString:@”“] 
&& ![[signParams objectForKey:categoryId] isEqualToString:@”sign”] 
&& ![[signParams objectForKey:categoryId] isEqualToString:@”key”] 
) 
{ 
[contentString appendFormat:@”%@=%@&”, categoryId, [signParams objectForKey:categoryId]];
} 
} 
//添加商户密钥key字段 
[contentString appendFormat:@”key=%@”, @”这里填写商户密钥”]; 
NSString *result = [self md5:contentString]; 
return result;

}//创建发起支付时的sige签名

-(NSString ) md5:(NSString )str 
{ 
const char *cStr = [str UTF8String]; 
unsigned char result[16]= “0123456789abcdef”; 
CC_MD5(cStr, (CC_LONG)strlen(cStr), result); 
//这里的x是小写则产生的md5也是小写,x是大写则md5是大写,这里只能用大写,微信的大小写验证很逗 
return [NSString stringWithFormat: 
@”%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X”, 
result[0], result[1], result[2], result[3], 
result[4], result[5], result[6], result[7], 
result[8], result[9], result[10], result[11], 
result[12], result[13], result[14], result[15] 
]; 
}//MD5 加密


#

以上是詳解iOS微信支付開發案例代碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。