1、微信平台申請
申請入口:登錄微信商戶平台-->產品中心-->我的產品-->支付產品-->H5支付
2、填寫參數
在微信支付平台成功申請到微信 H5 支付後,可以通過工單或 IM(標准版及以上版本)填寫渠道參數。
② 如何在IOS的safari瀏覽器調起微信支付
在瀏覽器中調起微信支付,一般情況下,是在後台接入微信支付的介面,然後當用戶需要支付的時候,在前台顯示一個支付的二維碼,用戶使用微信支付的掃一掃功能,掃描該二維碼,獲取相應的支付信息,使用手機進行支付
③ iOS-APP實現微信H5支付總結
1、發起下單請求( 調用統一下單介面 )註:交易類型trade_type=MWEB
2、統一下單介面返回支付相關參數給商戶後台,如支付跳轉url(參數名「mweb_url」),商戶通過mweb_url調起微信支付中間頁。如: https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=&package=600759311&redirect_url=http%3a%2f%2www..com
3、中間頁進行H5許可權的校驗,安全性檢查( 具體錯誤見微信官方文檔 )
4、如果許可權校驗成功,微信支付中間頁會發起支付請求。請求完畢跳到回調頁面(由redirect_url決定)。APP需要在webView中監聽這個請求,打開微信進行支付。如: weixin://wap/pay?prepayid%&package=2965581453&noncestr=1545905512&sign=
5、微信支付完畢跳回APP。
HTTP Referer是header的一部分,當瀏覽器向web伺服器發起請求的時,一般會帶上Referer,告訴伺服器我是從哪個頁面鏈接過來。微信中間頁會對Referer進行校驗,非安全域名將不能正常載入。
redirect_url是微信中間頁喚起微信支付之後,頁面重定向的地址。中間頁喚起微信支付後會跳轉到指定的redirect_url。並且微信APP在支付完成時,也是通過redirect_url回調結果,redirect_url一般是一個頁面地址,所以微信支付完成會打開Safari瀏覽器。本文通過修改redirect_url,實現微信支付完畢跳回當前APP。
需要將微信H5支付的安全域名配置成scheme,微信支付完成會通過這個scheme跳轉回APP。
再shouldStartLoadWithRequest:方法裡面攔截微信中間頁(以「 https://wx.tenpay.com 」開頭鬧戚侍的請求),截取redirect_url,如果redirect_url已經被替換成scheme不攔截,如果沒有被替換,攔截請求,保存當前的redirect_url。創建一個新的微信中間頁請求,將redirect_url替換成「安全域名://」(微信支付完畢會通過openURL打開當前APP,如果不替換redirect_url,微信支付完畢會打開Safari瀏覽器。)。設置「Referer」為安全域名(微信會校驗Referer,不是安全域名會載入失敗),重新load請求。
微信中間頁載入成功後,會收到一個打開微信的請求,用openURL:打開這個url實現跳轉到微信支付。
微信中間頁跳轉到微信時液吵,會將頁面從定向到仔毀redirect_url,由於redirect_url被我們修改為scheme,所以需要攔截這個非法的scheme請求,替換成記錄下的redirect_url。
以UIWebView為例
還有一篇文章講的是H5支付封裝,H5支付不僅可以在網頁上使用,原生也可以調用。具體內容見: iOS-H5支付(微信、支付寶)原生封裝
④ 微信網頁支付應該怎麼調用微信介面
1、申請微信支付。
小程序認證以後,可以在小程序後台,微信支付菜單欄,申請微信支付。
填寫企業信息和對公賬戶,微信譽跡支付會打一筆隨機金額到對公賬戶,輸入金額完成驗證後,在線簽署遷移,即完成了微信支付的申請流程。
微信支付申請完,會發送微信支付商戶號,商戶平台用戶名密碼等信息到注冊者郵箱。
2、配置小程序密鑰。
小程序後台設置頁,點擊生成,管伍洞理員驗證二維碼後,會隨機生成AppSecret。
請妥善保管好Appsecret,不要明文存儲於伺服器,AppSecret用於和微信伺服器交互。
比如獲取用戶的openid介面就需要用到.
3、設置密鑰和下載證書
用申請微信支付獲得的用戶名和密碼,登錄商戶平台(pay.weixin.qq),在賬戶中心,API安全中下載證書和設置密鑰。
密鑰是32位,設置以後需要妥善保管,因為無法查看密鑰,所有微信支付相關的介面都會使用這個密鑰加密。
4、配置HTTPS伺服器小程序的前端是使用微信提供的框架開發,但是後台依然是開發者自己的伺服器。
小程序發起的是HTTPS請求,意味著小程序開發者必須配置HTTPS伺服器。
配置HTTPS伺服器之前,先要獲取證書,證書可以向相關機構購買,騰訊雲目前可以向用戶提供免費的證書。
5、微信支付流程
微信支付有多種支付方式,包括刷卡支付,公眾號支付,掃碼支付,APP支付,所有微信支付的介面都可以到官方找到。
小程序是在微信里調起支付的,其實是公眾號支付,關於公眾號支付的詳細文檔可以這里找到: bbs51/f-37-1/。
所有公眾號支付相關的鏈接都可以在此鏈接找到,開發者首先需要大概了解這些介面。
6、小程序調起微信支付,用的是小程序微信支付介面wx.requestPayment,該介面的詳細描述可以查看小程序的微信支付API。
這個介面中的package和timeStamp參數是從開發者的第三方伺服器返回的,package是第三方伺服器從統一下單介面回復中獲得。
介面中其他的參數,appId,noceStr,signType以及paySign則由小程序這邊存儲或慶橘並者計算而得。
⑤ iOS H5調用微信(支付寶)支付與回調
利用WKWebView載入網頁,在app中處理H5頁面調用微信支付 ------ 實現WKNavigationDelegate協議
該方法是決定H5頁面是否允許跳轉的
- (void)webView:(WKWebView*)webView :(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler{
WKNavigationActionPolicy actionPolicy =WKNavigationActionPolicyAllow;//允許
NSString*urlScheme = navigationAction.request.URL.scheme;
NSString*urlString = navigationAction.request.URL.absoluteString;
NSString *wxPre = @"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb";
NSURLRequest*request = navigationAction.request;
NSLog(@"urlScheme:%@",urlScheme);
NSLog(@"urlStr:%@",urlString);
if([urlString containsString:@"weixin://wap/pay?"]) {
actionPolicy =;//不唯則允許跳轉
NSURL*url = [NSURLURLWithString:urlString];
if([[]respondsToSelector:@selector(openURL:options:completionHandler:)]){
if(@available(iOS10.0, *)) {
[[UIApplication sharedApplication] openURL:url options:@{: @NO} completionHandler:^(BOOL success) {
}];
}else{
// Fallback on earlier versions
[[]openURL:url];
}
}else{
碼謹 [[UIApplication sharedApplication]openURL:url];
}
}
decisionHandler(actionPolicy);//這句是必須加上的,不然會異常
}
很多小夥伴兒都遇到回跳的問題,點擊「完成」或「取消」跳到了Safari卻跳不回APP。
2.1、配置URL Types 添加schemes:www.xxxx.com
2.2、配置 Referer
[requestsetValue:@"www.suxiangshidai.com://" forHTTPHeaderField:@"Referer"];
2.3、伺服器回調的URL中一定要寫成 www.suxiangshidai.com:// , 如果一定要拼接,可以讓後台區分一下,如指模棚果是iOS 前面一定要寫成 www.suxiangshidai.com:// ,不然跳不回APP。
注意:www.xxxx.com 此域名一定是H5授權的域名,如果是二級域名,可以寫成:aaa.xxxx.com
一般支付完 不管完成與否都要調一下回調地址來刷新支付頁面的,但問題是iOS的回調地址中一定要寫成 www.xxxx.com:// 這樣的格式才能跳回來,但是調回來後沒有執行回調地址,頁面又刷新不了,或者跳回來後是個空白頁,這又產生了一個新的問題。當點擊微信支付頁上的「完成」或「取消」返回APP時,會調用 AppDelegate 中的 openURL: 方法
-(BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options{
// url.scheme 就是 www.suxiangshidai.com,你只需要在這做一個判斷,如果是 www.suxiangshidai.com 你就給外部發一個通知,那外部接收到這個通知,刷新界面就行了。
//刷新地址也就是支付完的回調地址,後台可以把回調地址拼接在 www.xxxx.com:// 後面,例如:www.xxxx.com://http://www..com 。 那麼 url 就是 www.xxxx.com:// http://www..com ,你向外部發通知時把 url 作為參數傳出去即可
if ([url.scheme containsString:@"www.suxiangshidai.com"]) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"weChatPayHandle" object:nil userInfo:@{@"url":url}];
}
return YES;
}
//微信支付後刷新主界面 (處理通知的方法 )
-(void)refreshOrderData:(NSNotification*)notifi{
NSDictionary*dic = notifi.userInfo;
NSString*url = [NSStringstringWithFormat:@"%@",dic[@"url"]];
NSRange range = [url rangeOfString:@"www.suxiangshidai.com://"];
NSString*lastUrl = [urlsubstringFromIndex:range.length];
NSLog(@"%@",lastUrl);
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:lastUrl]]];
}
解決h5的支付寶支付問題 可以提供兩種解決辦法
第一種 調用支付寶網頁支付
(問題 支付成功後回調到了游覽器,無法返回APP,解決如下)
//以WKWebView為例
- (void)webView:(WKWebView*)webView :(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler {
WKNavigationActionPolicy actionPolicy =WKNavigationActionPolicyAllow;//允許
NSString*urlScheme = navigationAction.request.URL.scheme;
NSString*urlString = navigationAction.request.URL.absoluteString;
NSString *wxPre = @"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb";
NSURLRequest*request = navigationAction.request;
NSLog(@"urlScheme:%@",urlScheme);
NSLog(@"urlStr:%@",urlString);
// 先判斷一下,找到需要跳轉的再做處理
if([urlSchemeisEqualToString:@"alipay"]) {
// 1.以?號來切割字元串
NSArray* urlBaseArr = [:@"?"];
NSString* urlBaseStr = urlBaseArr.firstObject;
NSString* urlNeedDecode = urlBaseArr.lastObject;
// 2.將截取以後的Str,做一下URLDecode,方便我們處理數據
// NSMutableString * afterDecodeStr = [NSMutableString stringWithString:[self URLDecodedString:urlNeedDecode]];
NSString*afterDecodeStr =WebURLDecodedString(urlNeedDecode);
// 3.替換裡面的默認Scheme為自己的Scheme
NSString* afterHandleStr = [:@"alipays"withString:@"QEQuickEnjoyment"];
// 4.然後把處理後的,和最開始切割的做下拼接,就得到了最終的字元串
NSString* finalStr = [NSStringstringWithFormat:@"%@?%@",urlBaseStr,WebURLEncode(afterHandleStr)];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 判斷一下,是否安裝了支付寶APP(也就是看看能不能打開這個URL)
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:finalStr]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:finalStr]];
}
});
// 2.這里告訴頁面不走了 -_-
decisionHandler();
return;
}
decisionHandler(actionPolicy);//這句是必須加上的,不然會異常
}
// OC 做URLEncode的方法
staticinlineNSString* WebURLEncode(NSString* str){
NSString*charactersToEscape =@"#[]@!$'()*+,;\"<>%{}|^~`";
NSCharacterSet*allowedCharacters = [[:charactersToEscape]invertedSet];
NSString *encodedUrl = [[str description] :allowedCharacters];
return encodedUrl; }
staticinlineNSString*WebURLDecodedString(NSString* str)
{ return [str ]; }
這樣h5處理支付寶就可以了
但是如果想在支付寶成功後app處理事件 處理如下:
回到Appdelegate的代理方法
-(BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options{// 判斷一下這個host,safepay就是支付寶的if([url.host isEqualToString:@"safepay"]) {// 拿到這個鏈接的數據,數據大概是這樣的/*
mushRoomBox://safepay/?%7B%22memo%22:%7B%22result%22:%22%7B%5C%22alipay_trade_wap_pay_response%5C%22:%7B%5C%22code%5C%22:%5C%2210000%5C%22,%5C%22msg%5C%22:%5C%22Success%5C%22,%5C%22app_id%5C%22:%5C%222017020505522491%5C%22,%5C%22auth_app_id%5C%22:%5C%222017020505522491%5C%22,%5C%22charset%5C%22:%5C%22GBK%5C%22,%5C%22timestamp%5C%22:%5C%222018-11-09%2011:43:06%5C%22,%5C%22out_trade_no%5C%22:%5C%222018100001_simple_%5C%22,%5C%22total_amount%5C%22:%5C%220.01%5C%22,%5C%22trade_no%5C%22:%5C%%5C%22,%5C%22seller_id%5C%22:%5C%222088221175674834%5C%22%7D,%5C%22sign%5C%22:%5C%22T6jn7QSsvjjG%5C/%5C/%5C/QHc++1TZnraDfm0I%5C/OwAnA5iCTOhq%5C/fkm%5C/i0vLk17W8s+LjcOUT%5C/zB6K6gN+fyCefm8FOJ+8g4GUAreuZDcW0MuGE1OOmaxDrXg==%5C%22,%5C%22sign_type%5C%22:%5C%22RSA2%5C%22%7D%22,%22ResultStatus%22:%229000%22,%22memo%22:%22%22%7D,%22requestType%22:%22safepay%22%7D
*/// 然後,一樣的套路方法
NSString* urlNeedjsonStr = url.absoluteString;
NSArray* afterComStr = [urlNeedJsonStr componentsSeparatedByString:@"?"];/
/ 這個decode方法,在上面找哈NSString* lastStr = [self WebURLDecodedString:afterComStr.lastObject];// 這個lastStr,其實是一個jsonStr,轉一下,就看到了數據
NSDictionary* dict = [self dictionaryWithJsonString:lastStr];// dict的結構差不多是這樣/*
"memo": {
"result":"訂單相關信息,如訂單號,支付金額等等";
"ResultStatus":"9000";
},
******
*/// 和支付寶SDK的返回結果一次,這個ResultStatus,就是我們要的數據// 9000 :支付成功// 8000 :訂單處理中// 4000 :訂單支付失敗// 6001 :用戶中途取消// 6002 :網路連接出錯// 這里的話,就可以根據狀態,去處理自己的業務了}returnYES;}
- (NSDictionary*)dictionaryWithJsonString:(NSString*)jsonString{
if(jsonString ==nil) {
return nil;
}
NSData*jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError*err;NSDictionary*dic = [:jsonData options::&err];
if(err)
{NSLog(@"json解析失敗:%@",err);
return nil;
}return dic;
}
接支付寶提供的SDK,schemeStr參數傳入自己APP的URLScheme即可。 具體的 手機網站支付轉Native支付
1.1、掉起支付寶APP
1.2、支付完成後,支付寶APP要返回到我們的APP裡面來
- (void)webView:(WKWebView*)webView :(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler{
BOOL isIntercepted = [[AlipaySDK defaultService] payInterceptorWithUrl:[navigationAction.request.URL absoluteString] fromScheme:@"WRWarehouseHasRice" callback:^(NSDictionary *result) {
// 處理支付結果
NSLog(@"%@", result);
// isProcessUrlPay 代表 支付寶已經處理該URL
if([result[@"isProcessUrlPay"]boolValue]) {
// returnUrl 代表 第三方App需要跳轉的成功頁URL
NSString*urlStr = result[@"returnUrl"];
}
}];
if(isIntercepted) {
decisionHandler();
return;
}
decisionHandler(WKNavigationActionPolicyAllow);
}
⑥ iOS如何在WebView頁面調起微信支付並可以返回App
iOS可以不集成微信支付SDK,通過WebView頁面調起微信支付頁面,具體配置流程如下:
1、需要在Xcode工程Targets中配置白名單,確保能夠順利跳轉到微信
2、在Xcode工程Targets中配置URL Types,設置的URL Schemes為微信支付商戶平台申請的域名,羨廳從歷察而可以讓微信識別回到調起支付的的App
3、在WKWebView的代理方法中,攔截微信支付的鏈接,配置支付授權域名,即Refer欄位
注意:如果有多個host域名,可以服務端配置下發。
4、經過這三個步驟後,可以調起微信支付,並且取消支付或完成支付時,可以回到App;接下來的問題是頁面如何刷新的問題,一般有兩種處理方案:
(1)調起微信支付的同時在WebView頁面彈出一個提示框,回來後可以讓用戶點擊已完成支付或遇到問題,然後頁面刷新
(2)在AppDelegate中,,監聽迴流到App的域名是否是微信支付的回調,通過通知的肢派茄形式刷新WebView頁面
一般項目使用方案一的較多,可以減少多餘的判斷處理邏輯,刷新邏輯放在WebView頁面處理,我們在項目中也是使用的這種方案。
⑦ iOSAPP端接入微信支付流程
商戶在微信開放平台申請開發APP應用後,微信開放平台會生成APP的唯一標識APPID。在Xcode中打開項目,設置項目屬性中的URL Schemes為您的APPID。如圖所示。
2.導入微信支付SDK
將官方demo中的這個文件夾拷貝到項目里
在APPdelegate里設置APPID
導入依賴庫
項首薯目中點擊支付的按鈕寫上如下方法
別忘了導入頭文件和遵循代理和注冊代理
info.plist里添加如下欄位LSApplicationQueriesSchemes,為Array類型,然後在裡面添加兩個小選項,分別為weixin和wechat
注意!!!下面這三處 一定要對應上 少一不可
如果不回調州敏,APPdelegate里寫上這個
//被廢棄的方法如下
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
//替換的新方法
- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary*)options {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
//調起微信支付
PayReq* req = [[PayReq alloc] init];
req.partnerId = @"1220277201";
req.prepayId = @"";
req.nonceStr = @"83DB7tk21akNRSFs";
req.timeStamp = 1458027344;
req.package = @"Sign=WXPay";
req.sign = @"";
[WXApi sendReq:req];
// 獲取當前時間
time_t now;
者跡者 time(&now);
// 時間戳
//NSString *timestamp = [NSString stringWithFormat:@"%ld", now];
// 隨機字元串
//NSString *nonceStr = [[self md5:timestamp] uppercaseString];
//訂單id
NSString *prepayid = _prepayid;
PayReq *request = [[PayReq alloc] init];
/** 商家向財付通申請的商家id */
request.partnerId = WXPartnerid;
/** 預支付訂單 */
request.prepayId= prepayid;
/** 商家根據財付通文檔填寫的數據和簽名 */
request.package = @"Sign=WXPay";
/** 隨機串,防重發 */
request.nonceStr= _noncestr;
/** 時間戳,防重發 */
request.timeStamp = [_timestamp intValue];
/** 商家根據微信開放平台文檔對數據做的簽名 */
request.sign= _sign;
/*! @brief 發送請求到微信,等待微信返回onResp
*
* 函數調用後,會切換到微信的界面。第三方應用程序等待微信返回onResp。微信在非同步處理完成後一定會調用onResp。支持以下類型
* SendAuthReq、SendMessageToWXReq、PayReq等。
* @param req 具體的發送請求,在調用函數後,請自己釋放。
* @return 成功返回YES,失敗返回NO。
*/
[WXApi sendReq: request];
⑧ Cocos creator ios開發—微信支付(三)
目錄: Cocos creator ios開發-接入微信SDK系列文章
這是官方文檔: app微信支付開發文檔
第一步、
先接入微信SDK,請參考 Cocos creator ios開發—接入微信SDK
第二步、拿旁拿
在Xcode的Info的設置項中,URL Types 的URL Schemes填寫APPID
在AppController.h中添加消搭介面:
app啟動時,注冊APPID,在AppController.mm中的didFinishLaunchingWithOptions方法中調用
第三步、
向oc發啟悶送支付信息
第四步、
oc收到支付信息,發起支付