iOS微信支付

抽個(gè)時(shí)間總結(jié)一下微信支付;

在AppDelegate中注冊(cè)

在-(BOOL)application:didFinishLaunchingWithOptions:launchOptions中注冊(cè):

[WXApi registerApp:@"wxb4ba3c02aa476ea1" withDescription:nil];

配置應(yīng)用間跳轉(zhuǎn)的URL:


點(diǎn)擊支付

        NSString *res = [WXplay jumpToBizPay];
        if( ![@"" isEqual:res] ){
            UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"支付失敗" message:res delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alter show];
            [alter release];
        }

WXplay.m

+ (NSString *)jumpToBizPay {
    
    //============================================================
    // V3&V4支付流程實(shí)現(xiàn)
    // 注意:參數(shù)配置請(qǐng)查看服務(wù)器端Demo
    // 更新時(shí)間:2015年11月20日
    //============================================================
    NSString *urlString   = @"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios";
    //解析服務(wù)端返回json數(shù)據(jù)
    NSError *error;
    //加載一個(gè)NSURL對(duì)象
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
    //將請(qǐng)求的url數(shù)據(jù)放到NSData對(duì)象中
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    if ( response != nil) {
        NSMutableDictionary *dict = NULL;
        //IOS5自帶解析類(lèi)NSJSONSerialization從response中解析出數(shù)據(jù)放到字典中
        dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
        
        NSLog(@"url:%@",urlString);
        if(dict != nil){
            NSMutableString *retcode = [dict objectForKey:@"retcode"];
            if (retcode.intValue == 0){
                NSMutableString *stamp  = [dict objectForKey:@"timestamp"];
                
                //調(diào)起微信支付
                PayReq* req             = [[[PayReq alloc] init]autorelease];
                req.partnerId           = [dict objectForKey:@"partnerid"]; // 商戶(hù)號(hào)
                req.prepayId            = [dict objectForKey:@"prepayid"];// 預(yù)支付交易會(huì)話(huà)ID
                req.nonceStr            = [dict objectForKey:@"noncestr"];//隨機(jī)字符串
                req.timeStamp           = stamp.intValue; //時(shí)間戳
                req.package             = [dict objectForKey:@"package"];//Sign=WXPay
                req.sign                = [dict objectForKey:@"sign"];//簽名
                [WXApi sendReq:req];
                //日志輸出
//                NSLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",[dict objectForKey:@"appid"],req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign );
                return @"";
            }else{
                return [dict objectForKey:@"retmsg"];
            }
        }else{
            return @"服務(wù)器返回錯(cuò)誤,未獲取到j(luò)son對(duì)象";
        }
    }else{
        return @"服務(wù)器返回錯(cuò)誤";
    }
}

WXApiManager 需要遵守 WXApiDelegate

實(shí)現(xiàn)單例:

+(instancetype)sharedManager {
    static dispatch_once_t onceToken;
    static WXApiManager *instance;
    dispatch_once(&onceToken, ^{
        instance = [[WXApiManager alloc] init];
    });
    return instance;
}

WXApiDelegate代理方法的實(shí)現(xiàn)

  • 實(shí)現(xiàn)onResp方法、完成支付后,微信app會(huì)返回到商家app頁(yè)面,并且回調(diào)onResp函數(shù),開(kāi)發(fā)者需要在該方法中接收通知,判斷返回碼,如果支付成功則去后臺(tái)查詢(xún)支付結(jié)果再展示給用戶(hù)實(shí)際支付結(jié)果
-(void)onResp:(BaseResp *)resp {
  if([resp isKindOfClass:[PayResp class]]){
        //支付返回結(jié)果,實(shí)際支付結(jié)果需要去微信服務(wù)器端查詢(xún)
        NSString *strMsg,*strTitle = [NSString stringWithFormat:@"支付結(jié)果"];
        switch (resp.errCode) {
            case WXSuccess:
                // 在此顯示支付結(jié)果數(shù)據(jù)(從服務(wù)器獲?。?                strMsg = @"支付結(jié)果:成功!";
                NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);
                break;
            default:
                strMsg = [NSString stringWithFormat:@"支付結(jié)果:失??!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
                NSLog(@"錯(cuò)誤,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
                break;
        }
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 看到個(gè)不錯(cuò)的微信集成帖子,分享給大家?。ㄒ?yàn)槲⑿胖Ц兑舱媸菈驉盒牡模琓M要配置什么環(huán)境都沒(méi)說(shuō),肯定很多新手會(huì)被惡心...
    白屏閱讀 1,227評(píng)論 0 48
  • 前言:之前聽(tīng)說(shuō)過(guò)微信支付有很多坑,其實(shí)沒(méi)有想象的那么坑,整體感覺(jué)很容易上手,按照它的流程來(lái)不會(huì)有錯(cuò)!PS:官方的流...
    li大鵬閱讀 5,079評(píng)論 5 41
  • 微信支付的流程 注冊(cè)微信開(kāi)放平臺(tái),創(chuàng)建應(yīng)用獲取appid,appSecret,申請(qǐng)支付功能,申請(qǐng)成功之后會(huì)返回一些...
    管家頗閱讀 1,630評(píng)論 2 5
  • iOS支付 iOS支付分為兩類(lèi),第三方支付和應(yīng)用內(nèi)支付(內(nèi)購(gòu))。 第三方支付包括:支付寶支付、微信支付、銀聯(lián)支付、...
    請(qǐng)輸入賬號(hào)名閱讀 6,473評(píng)論 3 22
  • 習(xí)慣性起床后去歡兒房間小睡一下,眼看今天天氣放晴,探討這著可以去上早教課,姥姥跟我描述前幾天她上課的情景。她睡眼朦...
    歡歡樂(lè)樂(lè)1317閱讀 306評(píng)論 0 0

友情鏈接更多精彩內(nèi)容