最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

我們看到demol中有個WXApiManager.h和WXApiManager.m文件,因?yàn)樗锩鏁玫?所以這里我們直接將demol中的這兩個文件也拖進(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
? ? // 更新時間:2015年11月20日
? ? //============================================================
? ? //在那里使用的url是微信里面的,在實(shí)際開發(fā)中,換成我們自己的url即可,讓后臺返回的參數(shù)就按照微信里面的來,這樣我們下邊就不用改什么了,只換個url即可(需要跟后臺商定,一般都是需要傳參數(shù)的);
? ? NSString *urlString ? = @"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios";
? ? //解析服務(wù)端返回json數(shù)據(jù)
? ? NSError *error;
? ? //加載一個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ù)就是從上面那個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ù)器返回錯誤,未獲取到j(luò)son對象";
? ? ? ? }
? ? }else{
? ? ? ? return @"服務(wù)器返回錯誤";
? ? }


}

在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 {
//寫了一個單例來處理微信支付結(jié)果的回調(diào),處理在WXApiManager文件中操作
? ? return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}

在WXApiManager.h文件中會有個微信支付的支付結(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)錯誤:

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

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

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

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

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

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

相關(guān)文章

  • ios開發(fā)中的容錯處理示例詳解

    ios開發(fā)中的容錯處理示例詳解

    最近發(fā)現(xiàn)還是有很多朋友在問類似解析時容錯問題怎么解決,所以下面這篇文章主要給大家介紹了關(guān)于ios開發(fā)中的容錯處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們一起來看看吧
    2018-05-05
  • 如何在IOS中使用Cordova插件

    如何在IOS中使用Cordova插件

    這篇文章主要介紹了如何在IOS中使用Cordova插件,包括搭建和使用方法,如果對Cordova感興趣的同學(xué),可以參考下
    2021-04-04
  • iOS中的UITextView文字輸入光標(biāo)使用技巧小結(jié)

    iOS中的UITextView文字輸入光標(biāo)使用技巧小結(jié)

    UITextView在用戶體驗(yàn)方面有著十分明顯的作用,包括鍵盤的呼出及文字的選擇等,接下來就來整理給出一份iOS中的UITextView文字輸入光標(biāo)使用技巧小結(jié),需要的朋友可以參考下
    2016-05-05
  • 最新評論

    巫山县| 南召县| 正定县| 南康市| 阜康市| 怀化市| 白水县| 牡丹江市| 大兴区| 浠水县| 大城县| 元阳县| 和林格尔县| 蒙城县| 梓潼县| 连江县| 望城县| 沁阳市| 工布江达县| 江安县| 嘉义县| 盐津县| 博客| 姚安县| 福海县| 江华| 河北省| 临潭县| 若尔盖县| 彰化县| 田林县| 淮北市| 曲沃县| 蓝田县| 八宿县| 宜兰县| 肥城市| 商城县| 台安县| 富源县| 资中县|