微信支付回撥頁面怎麼寫 - android微信支付回撥介面怎麼寫

來源:趣味經驗館 2.83W
1.android 微信支付回撥介面怎麼寫

之前搞微信支付一直不能夠回撥支付結果的回撥頁面,現在來說一下怎麼成功回撥頁面

微信支付回撥頁面怎麼寫 android微信支付回撥介面怎麼寫

參照文件:調起支付的程式碼:

[java] view plain copy

private void sendPayReq(String appid, String partnerid, String prepayid, String packageValue, String noncestr, int timestamp, String sign) {

//微信註冊APPID

IWXAPI api = WXAPIFactory.createWXAPI(this,null);

api.registerApp(appid);

PayReq request = new PayReq();

request.appId = appid;

request.partnerId = partnerid;

request.prepayId = prep

2.用urlscheme開啟微信支付,回撥怎麼做

微信支付的回撥首先,支付回撥API的方法,這個方法中完全是按照官方文件寫的,自己基本上不需要操作- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *):(id)annotation{//如果極簡開發包不可用,會跳轉支付寶錢包進行支付,需要將支付寶錢包的支付結果回傳給開發包if ([url.host isEqualToString:@"safepay"]) {[[AlipaySDK defaultService] :url standbyCallback:^(NSDictionary *resultDic) {//【由於在跳轉支付寶客戶端支付的過程中,商戶app在後臺很可能被系統kill了,所以pay介面的callback就會失效,請商戶對standbyCallback返回的回撥結果進行處理,就是在這個方法裡面處理跟callback一樣的邏輯】}[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {//【由於在跳轉支付寶客戶端支付的過程中,商戶app在後臺很可能被系統kill了,所以pay介面的callback就會失效,請商戶對standbyCallback返回的回撥結果進行處理,就是在這個方法裡面處理跟callback一樣的邏輯】}];}if ([sourceApplication isEqualToString:@"com.tencent.xin"]) {//微信支付回撥return [WXApi handleOpenURL:url delegate:self];}//跳轉處理BOOL result = [UMSocialSnsService handleOpenURL:url];if (result == FALSE) {//呼叫其他SDK,例如支付寶SDK等}return result;}最後微信會呼叫下面這個方法,我是在這個方法中做的操作,由於這個方法是在AppDelegate中,如果在這裡跳轉到自己指定的頁面,有些困難,於是就在這個方法中發通知到調起支付的頁面,再進行頁面跳轉操作。

//回撥方法-(void) onResp:(BaseResp*)resp{NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];NSString *strTitle;if([resp isKindOfClass:[SendMessageToWXResp class]]){strTitle = @"傳送媒體訊息結果";}if([resp isKindOfClass:[PayResp class]]){//支付返回結果,實際支付結果需要去微信伺服器端查詢strTitle = [NSString stringWithFormat:@"支付結果"];switch (resp.errCode) {case WXSuccess:{strMsg = @"恭喜您,支付成功!";[MYNotificationCenter postNotificationName:@"" object:nil userInfo:@{@"status":@"success"}];break;}case WXErrCodeUserCancel:{strMsg = @"已取消支付!";[MYNotificationCenter postNotificationName:@"" object:nil userInfo:@{@"status":@"cancle"}];break;}default:{strMsg = [NSString stringWithFormat:@"支付失敗 !"];[MYNotificationCenter postNotificationName:@"" object:nil userInfo:@{@"status":@"cancle"}];break;}}UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];[alert show];}}由於我們的取消和失敗,2種狀態的處理結果都是一樣的,所以就用了相同的通知。由於在調起支付頁面,在調起前就已經註冊了通知,現在支付完後,就可以收到支付狀態的通知了。

下面就很簡單了吧最後在說一下,由於我們的付款性質不一樣,所以就遇到了同樣的支付成功狀態,由於不同的支付型別要跳轉的頁面也是不同的,這就要求在AppDelegate中的那個處理方法中識別出,不同的支付型別,(如充值,購物等)但是這個方法是微信api回撥的方法,它只返回成功,取消,失敗等狀態。那就只能是支付前做個識別標示,但是由於支付跳到api了,脫離了應用,這個識別標示又無法直接傳過來。

我想的方法就是儲存一個支付標示:[[NSUserDefaults standardUserDefaults] setObject:@"CHONGZHI" forKey:@"PAYTYPE"];在每個型別的支付調起方法中,儲存一下不同的key,然後再那個-(void) onResp:(BaseResp*)resp。

熱門標籤