iOS开发之微信支付

微信支付官方文档 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_1
并且在上面下载demo 和要用的类库 。微信的demo上有很多的功能 , 看上去可能有点乱 ,需要耐心一点 。

如果你在项目中做了ShearSDK的微信分享,那么你就有把原有的WXApi.h ,WXApiObject.h , libWetChatSDK这三个文件删除然后再重新导入一遍在微信官网上下载的这三个文件。PS:不会影响到分享。
第一步:
在TARGETS—info—URL Types 中添加微信的URL Schemes 也就是APPId
第二步:
导入在工程中得文件

第三步:
在AppDelegate中导入WXApi.h, 并签订协议WXApiDelegate。实现 -(void) onResp:(BaseResp*)resp方法

 -(void) onResp:(BaseResp*)resp
            {


                NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
                NSString *strTitle;

                if([resp isKindOfClass:[SendMessageToWXResp class]])
                {
                    strTitle = [NSString stringWithFormat:@"发送媒体消息结果"];
                }
                if([resp isKindOfClass:[PayResp class]]){
                    //支付返回结果,实际支付结果需要去微信服务器端查询
                    strTitle = [NSString stringWithFormat:@"支付结果"];

                    switch (resp.errCode) {
                        case WXSuccess:
                            strMsg = @"支付结果:成功!";
                            NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);
                     if([self.EventZFStr isEqualToString:@"Event"])
                     {
                       [[NSNotificationCenter defaultCenter] postNotificationName:@"EventS" object:self];

                     }else{

                            [[NSNotificationCenter defaultCenter] postNotificationName:@"payWalletS" object:self];
                     }
                            break;

                        default:
                            strMsg = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
                            NSLog(@"错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
                            break;
                    }
                }


            }

第四步:
替换下图的参数替换成自己申请下来的

第五部在支付的视图中实现下面的方法

- (void)sendPay_demo:(NSMutableDictionary *)DIC
{
    //{{{
    //本实例只是演示签名过程, 请将该过程在商户服务器上实现

    //创建支付签名对象
    payRequsestHandler *req = [[payRequsestHandler alloc] init];
    //初始化支付签名对象
    [req init:APP_ID mch_id:MCH_ID];
    //设置密钥
    [req setKey:PARTNER_ID];

    //}}}
    NSString *moneyCount = [_textField.text stringByReplacingOccurrencesOfString:@"元" withString:@"" ];
    NSInteger num = [moneyCount integerValue] * 100;
    NSString *money = [ NSString stringWithFormat:@"%ld" , num];
    //获取到实际调起微信支付的参数后,在app端调起支付
    NSMutableDictionary *dict = [req sendPay_demo:[NSString stringWithFormat:@"%@" , [DIC objectForKey:@"ordernum"]] order_name:@"钱包充值" order_price:moneyCount];

    if(dict == nil){
        //错误提示
        NSString *debug = [req getDebugifo];



        NSLog(@"%@\n\n",debug);
    }else{
        NSLog(@"%@\n\n",[req getDebugifo]);
        //[self alert:@"确认" msg:@"下单成功,点击OK后调起支付!"];

        NSMutableString *stamp  = [dict objectForKey:@"timestamp"];

        //调起微信支付
        PayReq* req             = [[PayReq alloc] init];
        req.openID              = [dict objectForKey:@"appid"];
        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"];
      AppDelegate *appDelegate=[[UIApplication sharedApplication] delegate];

        appDelegate.EventZFStr = [NSString stringWithFormat:@"wallet"];


        [WXApi sendReq:req];
    }
}

微信支付的大概流程就是这样的。。
在做微信支付的时候要用真机测试 , 因为它要调用微信的客户端 。还支付的时候微信的金额是以分为单位的,所以要注意金额的转换!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值