IOS微信支付 总结


1、需要的文件 和数据

    (I)、需要的数据
     A>>>红色的为辅助文件, 若预付订单在服务器上生成,可以不需要这个。
    B>>>蓝色的文  微信官方提供的SDK


    (II)、需要的数据
    其中前三个是必须的, 后两个 我配置的时候暂时没用到。
    A>>> APP_ID          @"wxe2c244c0243fbb50"
    B>>> MCH_ID          @"1220892901" 微信发送到个人邮箱的 商户号注意是:10位数字
    C>>>PARTNER_Key      @"a2067c2e1a0327a3aa437d76f59b3ac3"
————————————————=—————————
————————————————=—————————
    D>>>APP_SECRET      @"ac41b7eddd9482594feedca01ae9940d"

    E>>>APP_Key         @"yePd1EMqjBHtkIrdraJs0sGtaEjtzbfH8SBuzGqkyBnSZNI5kuu93lSwLO41ctT8RPNi5IPjid9lsjfVP2oRKei4KEZdidxtk41oTRoljCKdhYyhIFieWBw8r4ZLDuqu"


2、设置回调URL:
    详情参考微信官方文档, 虽然不全但是很权威 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5
    1、把准备好的 SDK和辅助文件拖入工程
    2、添加回调URL 如下截图


3、APPDeleget中

#import "WXApi.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //注册微信支付
    [WXApi registerApp:@"wx774b6ed9aa2aaeeb" withDescription:@"demo 2.0"];
}
	//处理微信通过URL启动App时传递的数据
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
[WXApi handleOpenURL:url delegate:self];
    return YES;
}
//微信回调
- (void)onResp:(BaseResp *)resp {
    //回到中间模块(如果被用户点走了)
    JY_TabBarController *tabBar = [JY_TabBarController tabCtrOnce];
    [tabBar setSelectedIndex:2];
    CGRect rect = tabBar.tabBar.frame;
    rect.origin.y =K_ManScreenHeight;
    tabBar.tabBar.frame = rect;
    
    //errCode
    switch (resp.errCode) {
        case WXSuccess:{
            //            成功回调
            //            支付完成
      
        }break;
        default:{//提示微信支付失败

        }break;
    }
}

4、APP_ID等参数的 设置如截图


    5、微信支付进行时 (关键代码)

    首先调用统一下单, 获取预付ID(可再服务器上操作, 省去此步骤)。
    然后调起支付。

//统一下单
-(Void)toPay{
	 //创建支付签名对象
    payRequsestHandler *req = [[payRequsestHandler alloc] init];
    //初始化支付签名对象
    [req init:APP_ID mch_id:MCH_ID];
//    设置密钥
    [req setKey:PARTNER_Key];

/******************************************
******************************************/
    //统一下单 获取预付ID
    NSString *prePayId =  [self getPrePayIdWith:req];

    //发起支付
    if (prePayId) {
        if ([self payWithPrepayid:prePayId with:req]) {
            NSLog(@"调用微信成功");
        }else{
            NSLog(@"调用微信失败");
        }
    }
}

//统一下单
-(NSString *)getPrePayIdWith:(payRequsestHandler *)req{
    time_t  now;
    time(&now);
    NSString *time_stamp              = [NSString stringWithFormat:@"%ld", now];//时间戳
    NSString *nonce_str               = [WXUtil md5:time_stamp];//随机字符
    
    NSMutableDictionary *prePayParams = [[NSMutableDictionary alloc] init];
    [prePayParams setObject:APP_ID              forKey:@"appid"];
    [prePayParams setObject:MCH_ID              forKey:@"mch_id"];
    [prePayParams setObject:nonce_str           forKey:@"nonce_str"];//随机字符串
    [prePayParams setObject:@"商品"              forKey:@"body"];//商品或支付单简要描述
    [prePayParams setObject:[self generateTradeNO]   forKey:@"out_trade_no"];//商户系统内部的订单号,32个字符内、可包含字母
    [prePayParams setObject:@"1"                forKey:@"total_fee"];//以分位单位 int 类型
    [prePayParams setObject:[self getIPAddress] forKey:@"spbill_create_ip"];//本机IP
    [prePayParams setObject:NOTIFY_URL          forKey:@"notify_url"];//接收微信支付异步通知回调地址
    [prePayParams setObject:@"APP"              forKey:@"trade_type"];

    //最后添加签名信息
    NSString *sign = [req createMd5Sign:prePayParams];
    [prePayParams setObject:sign forKey:@"sign"];//签名
    
    
    NSString * prePayid = [req sendPrepay:prePayParams];
    return prePayid;
}
//发起支付
-(BOOL)payWithPrepayid:(NSString *)prePayId with:(payRequsestHandler *)req{
    
    time_t  now;
    time(&now);
    NSString *time_stamp  = [NSString stringWithFormat:@"%ld", now];
    NSString *nonce_str	= [WXUtil md5:time_stamp];
    
    NSMutableDictionary *prePayParams = [[NSMutableDictionary alloc] init];
    [prePayParams setObject:APP_ID          forKey:@"appid"];
    [prePayParams setObject:MCH_ID          forKey:@"partnerid"];
    [prePayParams setObject:prePayId        forKey:@"prepayid"];
    [prePayParams setObject:@"Sign=WXPay"   forKey:@"package"];
    [prePayParams setObject:nonce_str       forKey:@"noncestr"];
    [prePayParams setObject:time_stamp      forKey:@"timestamp"];
    //获取签名信息
    NSString *sign= [req createMd5Sign:prePayParams];
    
    //输出debug info
    NSString *debug     = [req getDebugifo];
    NSLog(@"调起支付签名: %@\n",debug);
    
    
    //调起微信支付
    PayReq* payReq = [[PayReq alloc] init];
    payReq.openID      = [prePayParams objectForKey:@"appid"];
    payReq.partnerId   = [prePayParams objectForKey:@"partnerid"];
    payReq.prepayId    = [prePayParams objectForKey:@"prepayid"];
    payReq.nonceStr    = [prePayParams objectForKey:@"noncestr"];
    payReq.timeStamp   = (int)now;
    payReq.package     = [prePayParams objectForKey:@"package"];
    payReq.sign        = sign;
    
    BOOL aBool = [WXApi sendReq:payReq];
    return aBool;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值