一、微信集成
? ? 1、準(zhǔn)備工作
? ? ? ? ①、進入微信開放平臺,申請開發(fā)者賬號
? ? ? ? ②、打開“管理中心”,“創(chuàng)建移動應(yīng)用”配置相關(guān)信息
? ? ? ? ③、開發(fā)者賬號認(rèn)證(300/年)
? ? ? ? ④、點擊應(yīng)用,“申請開通”微信支付,需要公司營業(yè)執(zhí)照、APP截圖(如果是沒上線的APP)),注意:申請時,經(jīng)營類目一定要和屬于營業(yè)執(zhí)照的子類,描述也要根據(jù)實際情況來寫;
? ? ? ? ⑤、開通之后你會收到一封郵件然后登陸商戶平臺驗證相關(guān)信息(此處需點擊“賬戶設(shè)置”-》“API安全”-》“設(shè)置秘鑰”(API_KEY)以備后面開發(fā)使用)
? ? ? ? ? 至此,微信支付前準(zhǔn)備工作完成
? ? 2、App-SDK集成
? ? ? ? ?①、到微信開放平臺下載SDK,解壓得到如下所示靜態(tài)庫以及.h文件,并將其拖入到自己的項目工程中
? ? ? ? ②、添加SDK所依賴的庫,如下(如已導(dǎo)入則不需要重新添加)
? ? ? ? ③、配置
? ? ? ? ? ? a、在如圖所示地方添加URL schemes
? ? ? ? ? ? ?b、在如圖所示添加LSApplicationQueriesSchemes
? ? ? ? ④、編譯報錯可能如下:(如有其他情況,請留言)
? ? ? ? ? ? No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).
? ? ? ? ? ? ? 解決辦法:進入Build Setting->設(shè)置”Build Active Architecture Only”為“NO”,如下圖
? ? ? ? ? ? -[__NSArrayM enqueue:]: unrecognized selector sent to instance.....
? ? ? ? ? ? ? 解決辦法:進入Build Setting->Other Linker Flags 添加-ObjC(注意大小寫)如下圖
? ? ? ? 到此,SDK集成工作完成,下面開始代碼
? ? 3、接口調(diào)用(微信支付步驟相當(dāng)?shù)疤塾心居小⒋颂幹v解的均為前端,實際開發(fā)建議放在后臺處理)
? ? ? ? ①、首先了解下微信支付的整個流程如下:
商戶系統(tǒng)和微信支付系統(tǒng)主要交互說明:
步驟1:用戶在商戶APP中選擇商品,提交訂單,選擇微信支付。
步驟2:商戶后臺收到用戶支付單,調(diào)用微信支付統(tǒng)一下單接口。參見【統(tǒng)一下單API】。
步驟3:統(tǒng)一下單接口返回正常的prepay_id,再按簽名規(guī)范重新生成簽名后,將數(shù)據(jù)傳輸給APP。參與簽名的字段名為appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式為Sign=WXPay
步驟4:商戶APP調(diào)起微信支付。api參見本章節(jié)【app端開發(fā)步驟說明】
步驟5:商戶后臺接收支付通知。api參見【支付結(jié)果通知API】
步驟6:商戶后臺查詢支付結(jié)果。,api參見【查詢訂單API】
? ? ? ? ②下面是具體項目中具體操作
? ? ? ? ? ? A、在- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions中注冊如下:
[WXApiregisterApp:@"微信開發(fā)平臺對應(yīng)應(yīng)用的APPID" withDescription:@"根據(jù)自己的情況填寫"];
? ? ? ? ? ? B、在- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options中實現(xiàn)如下:
return [WXApihandleOpenURL:urldelegate:self];
? ? ? ? ? ? ?C、實現(xiàn)如下方法,接收支付操作返回的結(jié)果
? ? ? ? ? ? ? D、模擬支付按鈕操作(參數(shù)簽名->調(diào)用統(tǒng)一下單接口->獲取prepayId)
? ? ? ? ? ? ? 此處講解第一次簽名,調(diào)用統(tǒng)一下單接口取得prepayId的操作,具體代碼如下:
? ? ? ? ? ? ? ? ? ?1)、獲取必要參數(shù)(@"appid" 、@"mch_id" 、@"nonce_str" 、@"sign"、@"body"、@"out_trade_no"、@"total_fee"、@"spbill_create_ip"、@"notify_url"、@"trade_type")(以字典的形式此處訂為parameters,詳細(xì)數(shù)據(jù)根據(jù)自己情況填寫)
? ? ? ? ? ? ? ? ? ?2)、根據(jù)如下步驟進行加密獲得簽名Sign(此處只給出代碼示例詳細(xì)不做解釋)
md5加密
? ? ? ? ? ? ? ? ? 3)、獲得此sign后,將參數(shù)(詳細(xì)參考接口文檔)以XML的形式調(diào)用統(tǒng)一下單接口如下:(此處接口調(diào)用不做詳解)
? ? ? ? ? ? ? ? ? 請求成功后,恭喜你,你可以獲取prepayId進行二次簽名(此處簽名同第一次簽名)獲取sign,并調(diào)用支付接口進行支付了。若請求失敗(根據(jù)return_msg字段提示解決問題),執(zhí)行支付操作成功或失敗可在回調(diào)函數(shù)onResp中查看相關(guān)信息,根據(jù)自己項目需求做處理。
至此微信支付完成,如若有什么問題,歡迎留言探討!!