iOS开发 微信支付 包看包会 系统返回的坑

微信支付  到这下载SDK  

https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1 

配置白名单  

TARGETS - > Info 0 ->  底下URL Types  

Indentifier : weixin   URLSchemes: 申请的微信key

appdelegate.m 开始

 注册微信    遵循代理   WXApiDelegate

#pragma mark - 注册微信
    BOOL isOk = [WXApiregisterApp:WeChatKey];  //申请的微信KEY
    if (isOk)
    {
        NSLog(@"注册微信成功");
    }
    else
    {
        NSLog(@"注册微信失败");
    }

//url Schemes回调
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return [WXApihandleOpenURL:urldelegate:self];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return [WXApihandleOpenURL:urldelegate:self];
}
//微信回调   //调起微信后  点击微信界面上取消  或者返回xxx应用会走下面这个方法
-(void)onResp:(BaseReq *)resp
{
    if ([respisKindOfClass:[PayRespclass]])
    {
        PayResp *response = (PayResp *)resp;
        if (response.errCode ==0) {
     //成功
            [[NSNotificationCenter defaultCenter]postNotificationName:ORDERPAYRESULT object:SUCCESS];
        }elseif (response.errCode ==1){
     //失败
            [[NSNotificationCenterdefaultCenter]postNotificationName:ORDERPAYRESULTobject:FAILURE];
        }else{
        }
    }
}


appdelegate.m 结束


//调起微信的Controller   


添加通知


app调起微信支付  需要这些参数

    PayReq *req             = [[PayReqalloc]init];
            req.openID              = obj[@"pararm"][@"appid"];
            req.partnerId           = obj[@"pararm"][@"partnerid"];
            req.prepayId            = obj[@"pararm"][@"prepayid"];
            req.nonceStr            = obj[@"pararm"][@"noncestr"];
            req.timeStamp           = obj[@"pararm"][@"timestamp"];
            req.package             = obj[@"pararm"][@"package"];
            req.sign                = obj[@"pararm"][@"sign"];
//是否调起成功
if ([WXApisendReq:req])
            {
//调起
            }
            else
            {
//失败
            }



实现通知方法

#pragma mark - 微信收到支付成功的消息后作相应的处理
- (void)orderPayResult:(NSNotification *)notification
{
    if ([notification.objectisEqualToString:SUCCESS])
    {
成功的各种操作
    }
    else
    {
失败的各种操作
    }
}



********************重点***********************

支付调起微信后   点击微信上按钮 取消  或者返回本应用  会调用  -(void)onResp:(BaseReq *)resp 方法

如果点击系统左上角自带返回按钮   无法获得回调  无法对支付完成或者取消支付做出相应操作和提示。

解决办法:

调起微信后  点击系统左上角返回  会走  

- (void)applicationWillEnterForeground:(UIApplication *)application 程序将要进入前台方法 

在这里发送通知  并且通过记录上一次调起支付的订单ID  在这里  根据订单号  向后台查询此订单的支付状态  即可 

代码 :

//程序将要进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application {
    [[NSNotificationCenterdefaultCenter]postNotificationName:@"getOrderState"object:nil];
}
    _indentId = obj[@"indentId"];  //记录服务器返回的订单ID 
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(getOrderState)name:@"getOrderState"object:nil];  这里我是在点击支付按钮时添加

- (void)getOrderState{
    根据订单ID向后台查询此订单的支付状态  _indentNum 
}


//如果有其他问题  欢迎在留言  或加QQ微信    下一篇讲解支付宝支付
//完    





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值