欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS開發(fā)微信支付的方法

 更新時(shí)間:2022年01月27日 10:29:36   作者:Frank_春兒  
這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)微信支付的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了iOS開發(fā)微信支付的具體代碼,供大家參考,具體內(nèi)容如下

首先我們到微信開放平臺,下載相應(yīng)的SDK。微信的官方文檔感覺說的很簡單,沒有支付寶那么詳細(xì),在這里說下集成SDK到我們的工程中。

下載好demol后(最新版本SDKSample_v2.0.2_V3pay),看到有個(gè)SDKExport的文件;

你可以直接將這個(gè)文件夾添加到你的工程中,或者你自己新建一個(gè)文件夾,將里面那三個(gè)文件粘貼到你新建的文件夾中,并添加到你的工程中;

接下來就是添加相應(yīng)地庫文件;

我們看到demol中有個(gè)WXApiManager.h和WXApiManager.m文件,因?yàn)樗锩鏁玫?所以這里我們直接將demol中的這兩個(gè)文件也拖進(jìn)我們工程中;

庫文件添加好之后,就是實(shí)現(xiàn)我們的微信支付功能;

點(diǎn)擊支付的button,完成支付;

引入頭文件:

#import "ViewController.h"
#import "WXApiObject.h"
#import "WXApi.h"

- (void)viewDidLoad {
? ? [super viewDidLoad];

? ? UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];
? ? btn.frame =CGRectMake(100, 100, 100, 50);
? ? [btn setTitle:@"點(diǎn)擊支付" forState:UIControlStateNormal];
? ? btn.backgroundColor = [UIColor magentaColor];
? ? [btn addTarget:self action:@selector(weixinPay) forControlEvents:UIControlEventTouchUpInside];
? ? [self.view addSubview:btn];

}
//在這里我們要判斷用戶是否安裝微信,如果未安裝是不能夠支付,因?yàn)槲⑿挪恢С志W(wǎng)頁支付,不像支付寶那樣,如果用戶未安裝支付寶,它會自動跳轉(zhuǎn)網(wǎng)頁支付,如果安裝,則會跳轉(zhuǎn)到支付寶客戶端進(jìn)行支付;微信則不可以,所以要判斷下;
- (void)weixinPay {
//判斷用戶是否安裝微信
? if ([WXApi isWXAppInstalled]) {
? ? ? ? ?NSString *res = [self doClickZhiFu];
? ? ? ? ?if( ![@"" isEqual:res] ){
? ? ? ? UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"支付失敗" message:res delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
? ? ? ? [alter show];
? ? ? ? ?}
? ? ? }else{
? ? ? //未安裝微信給出提示信息
? ? ? ? ?MBProgressHUD * hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
? ? ? ? ? ? hud.mode = MBProgressHUDModeText;
? ? ? ? ? ? hud.labelText = @"您未安裝微信,請選擇其他方式支付!";
? ? ? ? ? ? hud.labelFont = [UIFont systemFontOfSize:13];
? ? ? ? ? ? hud.removeFromSuperViewOnHide = YES;
? ? ? ? ? ? hud.color = [UIColor grayColor];
? ? ? ? ? ? hud.minSize = CGSizeMake(300, 100);
? ? ? ? ? ? [hud hide:YES afterDelay:2];

? ? ? ?}


}

- (NSString *)doClickZhiFu
{
? ? //============================================================
? ? // V3&V4支付流程實(shí)現(xiàn)
? ? // 注意:參數(shù)配置請查看服務(wù)器端Demo
? ? // 更新時(shí)間:2015年11月20日
? ? //============================================================
? ? //在那里使用的url是微信里面的,在實(shí)際開發(fā)中,換成我們自己的url即可,讓后臺返回的參數(shù)就按照微信里面的來,這樣我們下邊就不用改什么了,只換個(gè)url即可(需要跟后臺商定,一般都是需要傳參數(shù)的);
? ? NSString *urlString ? = @"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios";
? ? //解析服務(wù)端返回json數(shù)據(jù)
? ? NSError *error;
? ? //加載一個(gè)NSURL對象
? ? NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
? ? //將請求的url數(shù)據(jù)放到NSData對象中
? ? NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
? ? if ( response != nil) {
? ? ? ? NSMutableDictionary *dict = NULL;
? ? ? ? //IOS5自帶解析類NSJSONSerialization從response中解析出數(shù)據(jù)放到字典中
? ? ? ? dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
? ? ? ? if(dict != nil){
? ? ? ? ? ? NSMutableString *retcode = [dict objectForKey:@"retcode"];
? ? ? ? ? ? if (retcode.intValue == 0){
? ? ? ? ? ? ? ? NSMutableString *stamp ?= [dict objectForKey:@"timestamp"];

? ? ? ? ? ? ? ? //這里的數(shù)據(jù)就是從上面那個(gè)url請求之后獲取到消息結(jié)構(gòu)體里面的內(nèi)容
? ? ? ? ? ? ? ? //調(diào)起微信支付
? ? ? ? ? ? ? ? PayReq* req ? ? ? ? ? ? = [[PayReq alloc] init];
? ? ? ? ? ? ? ? req.partnerId ? ? ? ? ? = [dict objectForKey:@"partnerid"];
? ? ? ? ? ? ? ? req.prepayId ? ? ? ? ? ?= [dict objectForKey:@"prepayid"];
? ? ? ? ? ? ? ? req.nonceStr ? ? ? ? ? ?= [dict objectForKey:@"noncestr"];
? ? ? ? ? ? ? ? req.timeStamp ? ? ? ? ? = stamp.intValue;
? ? ? ? ? ? ? ? req.package ? ? ? ? ? ? = [dict objectForKey:@"package"];
? ? ? ? ? ? ? ? req.sign ? ? ? ? ? ? ? ?= [dict objectForKey:@"sign"];
? ? ? ? ? ? ? ? //最關(guān)鍵的就是這里發(fā)送請求到微信,
? ? ? ? ? ? ? ? [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對象";
? ? ? ? }
? ? }else{
? ? ? ? return @"服務(wù)器返回錯(cuò)誤";
? ? }


}

在AppDelegate.h操作,引入頭文件

#import "AppDelegate.h"
#import "WXApi.h"
#import "WXApiManager.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
? ? // Override point for customization after application launch.
? ? //向微信注冊wxd930ea5d5a258f4f,在微信平臺注冊后獲取的
? ? [WXApi registerApp:@"wxb4ba3c02aa476ea1" withDescription:@"demo 2.0"];

? ? return YES;
}
//微信支付回調(diào)的結(jié)果,在這里可以做你想要的操作
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
//寫了一個(gè)單例來處理微信支付結(jié)果的回調(diào),處理在WXApiManager文件中操作
? ? return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}

在WXApiManager.h文件中會有個(gè)微信支付的支付結(jié)果回調(diào),在這里可以處理你要的業(yè)務(wù)邏輯操作,如跳轉(zhuǎn)到指定頁面等等,方法可以使用通知,參照iOS 支付寶使用文章中的支付結(jié)果的處理;

#pragma mark - WXApiDelegate
- (void)onResp:(BaseResp *)resp {
? ? if ([resp isKindOfClass:[SendMessageToWXResp class]]) {
? ? ? ? if (_delegate
? ? ? ? ? ? && [_delegate respondsToSelector:@selector(managerDidRecvMessageResponse:)]) {
? ? ? ? ? ? SendMessageToWXResp *messageResp = (SendMessageToWXResp *)resp;
? ? ? ? ? ? [_delegate managerDidRecvMessageResponse:messageResp];
? ? ? ? }
? ? } else if ([resp isKindOfClass:[SendAuthResp class]]) {
? ? ? ? if (_delegate
? ? ? ? ? ? && [_delegate respondsToSelector:@selector(managerDidRecvAuthResponse:)]) {
? ? ? ? ? ? SendAuthResp *authResp = (SendAuthResp *)resp;
? ? ? ? ? ? [_delegate managerDidRecvAuthResponse:authResp];
? ? ? ? }
? ? } else if ([resp isKindOfClass:[AddCardToWXCardPackageResp class]]) {
? ? ? ? if (_delegate
? ? ? ? ? ? && [_delegate respondsToSelector:@selector(managerDidRecvAddCardResponse:)]) {
? ? ? ? ? ? AddCardToWXCardPackageResp *addCardResp = (AddCardToWXCardPackageResp *)resp;
? ? ? ? ? ? [_delegate managerDidRecvAddCardResponse:addCardResp];
? ? ? ? }
? ? }else if([resp isKindOfClass:[PayResp class]]){
? ? ? ? //支付返回結(jié)果,實(shí)際支付結(jié)果需要去微信服務(wù)器端查詢
? ? ? ? NSString *strMsg,*strTitle = [NSString stringWithFormat:@"支付結(jié)果"];

? ? ? ? switch (resp.errCode) {
? ? ? ? ? ? case WXSuccess:{
? ? ? ? ? ? ? ? strMsg = @"支付結(jié)果:成功!";
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? default:{
? ? ? ? ? ? ? ? strMsg = [NSString stringWithFormat:@"支付結(jié)果:失敗!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
? ? ? ? [alert show];
? ? }

}

以下為可能出現(xiàn)錯(cuò)誤:

有時(shí)候你會發(fā)現(xiàn)在測試的時(shí)候,點(diǎn)擊微信支付,調(diào)到微信界面時(shí)只有一個(gè)確定按鈕,出現(xiàn)這樣的情況大多數(shù)都是我們簽名錯(cuò)誤,才導(dǎo)致的;

1.檢查接口傳遞的字段是否都正確;

2.package = @”Sign=WXPay” 注意服務(wù)器傳來的是不是一樣的,不是就會出現(xiàn)錯(cuò)誤;

3.如果你app同時(shí)使用了友盟分享(含微信分享)和微信支付。如果你沒有處理好這個(gè)兩個(gè)SDK register的順序,就會出現(xiàn)這種情況。

解決辦法:改變兩者的register步驟。先調(diào)用友盟,然后調(diào)用微信。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • iOS獲取網(wǎng)絡(luò)類型的方法匯總

    iOS獲取網(wǎng)絡(luò)類型的方法匯總

    本篇文章主要給大家匯總介紹了iOS獲取網(wǎng)絡(luò)類型的方法,主要涉及到方面的內(nèi)容,對于IOS開發(fā)感興趣的同學(xué)可以參考一下
    2015-06-06
  • 微信支付開發(fā)IOS圖文教程案例

    微信支付開發(fā)IOS圖文教程案例

    這篇文章主要介紹了微信支付開發(fā)IOS案例的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • Objective-C?入門篇(推薦)

    Objective-C?入門篇(推薦)

    由C語言和Smalltalk擴(kuò)展出來的,是C語言的超集,最大的區(qū)別是OC是面向?qū)ο蟮模浠鹦俏膶懛▽τ谥皬氖翵ava開發(fā)的同學(xué)頗感蛋疼,OC最大特點(diǎn)之一是使用消息結(jié)構(gòu)而不是函數(shù)調(diào)用
    2021-11-11
  • IOS中NSPredicate和NSRegularExpression校驗(yàn)正則表達(dá)式區(qū)別

    IOS中NSPredicate和NSRegularExpression校驗(yàn)正則表達(dá)式區(qū)別

    本文文章通過實(shí)例代碼給大家講述了在IOS開發(fā)中NSPredicate和NSRegularExpression校驗(yàn)正則表達(dá)式區(qū)別,需要的朋友趕快學(xué)習(xí)下吧。
    2018-01-01
  • 基于IOS端微信分享失效的踩坑及解決方法

    基于IOS端微信分享失效的踩坑及解決方法

    下面小編就為大家分享一篇基于IOS端微信分享失效的踩坑及解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 解析iOS應(yīng)用開發(fā)中對設(shè)計(jì)模式中的抽象工廠模式的實(shí)現(xiàn)

    解析iOS應(yīng)用開發(fā)中對設(shè)計(jì)模式中的抽象工廠模式的實(shí)現(xiàn)

    這篇文章主要介紹了解析iOS應(yīng)用開發(fā)中對設(shè)計(jì)模式中的抽象工廠模式的實(shí)現(xiàn),示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2016-03-03
  • iOS開發(fā)教程之登錄與訪客的邏輯實(shí)現(xiàn)

    iOS開發(fā)教程之登錄與訪客的邏輯實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于iOS開發(fā)教程之登錄與訪客的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • iOS開發(fā)Masonry與Frame布局差異示例詳解

    iOS開發(fā)Masonry與Frame布局差異示例詳解

    這篇文章主要為大家介紹了iOS開發(fā)Masonry與Frame布局差異示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • iOS高仿微信相冊界面翻轉(zhuǎn)過渡動畫效果

    iOS高仿微信相冊界面翻轉(zhuǎn)過渡動畫效果

    在圖片界面點(diǎn)擊右下角的查看評論會翻轉(zhuǎn)到評論界面,評論界面點(diǎn)擊左上角的返回按鈕會反方向翻轉(zhuǎn)回圖片界面,真正的實(shí)現(xiàn)方法,與傳統(tǒng)的導(dǎo)航欄過渡其實(shí)只有一行代碼的區(qū)別,下面小編通過本文給大家介紹下ios高仿微信相冊界面翻轉(zhuǎn)過渡動畫效果,一起看看吧
    2016-11-11
  • IOS實(shí)現(xiàn)簡易版的QQ下拉列表

    IOS實(shí)現(xiàn)簡易版的QQ下拉列表

    在我們?nèi)粘i_發(fā)中tableView是用的非常多的控件, 無論在新聞應(yīng)用, 視頻, 聊天應(yīng)用中都廣泛使用, 那么今天小編也分享一個(gè)用tableView實(shí)現(xiàn)的類似QQ界面的下拉列表.效果很簡單,有需要的朋友們可以參考借鑒。
    2016-08-08

最新評論