微信支付 - 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.还有通知和加密 ,下次再说咯。。。

 

希望可以帮打大家 有什么不对的地方 欢迎指出 大家一起≈学习😊

 

posted @ 2016-03-28 15:37  喵喵yy  阅读(1440)  评论(6编辑  收藏  举报