你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS編程技術 >> 微信支付 - iOS

微信支付 - iOS

編輯:IOS編程技術

前言

大家都說微信支付很麻煩,我看了一下 就做一下記錄吧

正文

一:

1.微信開發網站:https://open.weixin.qq.com 

注冊一個開發者賬號,申請一個app,(大概7個工作日,但是好像不用那麼久)應該是一個賬號只能申請10個app,申請開通微信支付功能。

2.demo下載地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1

3.我記得我下載下來的demo就是好用的,不用調。

正常交互的是

交互細節如下:

步驟1:用戶進入商戶APP,選擇商品下單、確認購買,進入支付環節。商戶服務後台生成支付訂單,簽名後將數據傳輸到APP端。以微信提供的DEMO為例,見圖8.1。

步驟2:用戶點擊後發起支付操作,進入到微信界面,調起微信支付,出現確認支付界面,見圖8.2。

步驟3:用戶確認收款方和金額,點擊立即支付後出現輸入密碼界面,可選擇零錢或銀行卡支付見圖8.3。

商戶APP界面實例

圖8.1 商戶APP界面實例

   跳轉到微信支付

圖8.2 跳轉到微信支付


圖8.3 用戶確認支付

 

 

用戶確認支付

第四步:輸入正確密碼後,支付完成,用戶端微信出現支付詳情頁面。見圖8.4。

第五步:回跳到商戶APP中,商戶APP根據支付結果個性化展示訂單處理結果。見圖8.5。

支付成功提示頁面

圖8.4 支付成功提示頁面

返回到商戶APP提示

圖8.5 返回到商戶APP提示

4.業務流程是

APP支付時序圖

圖8.6 APP支付時序圖

商戶系統和微信支付系統主要交互說明:

步驟1:用戶在商戶APP中選擇商品,提交訂單,選擇微信支付。

步驟2:商戶後台收到用戶支付單,調用微信支付統一下單接口。

步驟3:統一下單接口返回正常的prepay_id,再按簽名規范重新生成簽名後,將數據傳輸給APP。參與簽名的字段名為appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式為Sign=WXPay

步驟4:商戶APP調起微信支付。

步驟5:商戶後台接收支付通知。

步驟6:商戶後台查詢支付結果。

 

 二:

怎麼導入自己的工程裡呢??
1.我現在就導入了這一個文件WXApiManager.h/m

#import "AppDelegate.h"
#import "WXApi.h"
#import "WXApiObject.h"
#import "WXApiManager.h"
@interface AppDelegate ()<WXApiDelegate>

@end

@implementation AppDelegate


#define APPID @"wxbxxxxxxxxxxx"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
//    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//    self.window.backgroundColor = [UIColor whiteColor];
//    [self.window makeKeyAndVisible];

    [WXApi registerApp:APPID];
    return YES;
}


- (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]];

 

 

//    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//    self.window.backgroundColor = [UIColor whiteColor];
//    [self.window makeKeyAndVisible];

這個一定要注釋掉
#import "ViewController.h"
#import "WXApiObject.h"
#import "WXApi.h"

@interface ViewController ()

@end

@implementation ViewController
- (IBAction)PayButton:(id)sender {
    //============================================================
    // V3&V4支付流程實現
    // 注意:參數配置請查看服務器端Demo
    // 更新時間:2015年11月20日
    //============================================================
    NSString *i = @"";
    NSString *urlString   = @"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios";
    //解析服務端返回json數據
    NSError *error;
    //加載一個NSURL對象
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
    //將請求的url數據放到NSData對象中
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    if ( response != nil) {
        NSMutableDictionary *dict = NULL;
        //IOS5自帶解析類NSJSONSerialization從response中解析出數據放到字典中
        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"];
                
                //調起微信支付
                PayReq* req             = [[[PayReq alloc] init]autorelease];
//                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"];

                //商戶號
                req.partnerId           = @"10000100";
                //預支付交易會話ID
                req.prepayId            = @"wx2016032814422154f71338a50151536932";
                //隨機字符串
                req.nonceStr            = @"5c95f7583741ee4ba8ae67f1658013dc";
                NSMutableString *z = [NSMutableString     stringWithFormat:@"1459147341"];
                //時間戳
                req.timeStamp           = z.intValue;
                //擴展字段
                req.package             = [dict objectForKey:@"package"];
                //簽名
                req.sign                = @"22FD8F35A93E5E4EE892CE3638CE4945";
                
                [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 );
                i = @"";
            }else{
                i = [dict objectForKey:@"retmsg"];
            }
        }else{
            i = @"服務器返回錯誤,未獲取到json對象";
        }
    }else{
        i = @"服務器返回錯誤";
    }
}

 參數都是那微信demo裡的參數填的

其實現在是可以支付的,親 可以試一下咯
 

 

2.還有通知和加密 ,下次再說咯。。。

 

希望可以幫打大家 有什麼不對的地方 歡迎指出 大家一起≈學習??

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved