微信支付

  • 微信支付要注意shareSDK里面微信是分为带支付不不带支付版本的微信,详情看shareSDK官方文档

向微信注册可写在didfinishedlunch方法里面

[WXApi registerApp:WeChat_AppID];//注册微信支付

在这里插入图片描述

  • 自己签名类型
//创建package签名   
-(NSString*) createMd5Sign :(NSMutableDictionary*)dict  
{  
    NSMutableString  *contentString  =[NSMutableString string];  
    NSArray  *keys = [dict allKeys];  
    //按字母顺序排序   
    NSArray  *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult( id obj1 , id obj 2) {  
        return  [obj1 compare :obj2 options :NSNumericSearch];  
    }];  
    //拼接字符串   
    for  (NSString *categoryId in sortedArray) {  
        if  (   ![[dict objectForKey:categoryId]  isEqualToString:@"" ]  
            && ![categoryId isEqualToString :@"sign"]  
            && ![categoryId isEqualToString :@"key"]  
            )  
        {  
            [contentString appendFormat :@"%@=%@&", categoryId, [dict  objectForKey:categoryId]];  
        }  
          
    }  
    //添加key字段   
    [contentString appendFormat :@"key=%@",  self.spKey];  
    //得到MD5 sign签名   
    NSString  *md5Sign =[contentString  MD5];  
      
    return  md5Sign;  
}  
  
- (NSMutableDictionary*)payWithprePayid:(NSString*)prePayid  
  
{  
    if (prePayid == nil)  
    {  
        NSLog(@"prePayid 为空" );  
        return  nil;  
    }  
      
    //获取到prepayid后进行第二次签名   
    NSString    *package, *time_stamp, *nonce_str;  
    //设置支付参数   
    time_t  now;  
    time(&now);  
    time_stamp  = [NSString stringWithFormat :@"%ld",  now];  
    nonce_str = [time_stamp MD5 ];  
    //重新按提交格式组包,微信客户端暂只支持package=Sign=WXPay格式,须考虑升级后支持携带package具体参数的情况   
    //package       = [NSString stringWithFormat:@"Sign=%@",package];   
    package         = @"Sign=WXPay" ;  
    //第二次签名参数列表   
    NSMutableDictionary  *signParams = [NSMutableDictionary dictionary];  
    NSLog(@"%@" ,signParams);  
    [signParams setObject : self.appId   forKey: @"appid"];  
    [signParams setObject : self.mchId   forKey: @"partnerid"];  
    [signParams setObject : nonce_str    forKey: @"noncestr"];  
    [signParams setObject : package      forKey: @"package"];  
    [signParams setObject : time_stamp   forKey: @"timestamp"];  
    [signParams setObject : prePayid     forKey: @"prepayid"];  
      
    //生成签名   
    NSString  *sign  = [self createMd5Sign:signParams];  
      
    //添加签名   
    [signParams setObject : sign         forKey :@"sign"];  
      
      
    //返回参数列表   
    return  signParams;  
}  

- (BOOL )application:(UIApplication *)application  handleOpenURL:(NSURL  *)url {  
      
    // 跳转到URL scheme中配置的地址   
    //NSLog(@"跳转到URL scheme中配置的地址-->%@",url);   
    return   [WXApi handleOpenURL:url  delegate:[WXApiManager sharedManager ]];  
}  

微信回调

  • 可参照第三方登录时的回调代理方法,只是对应的类不一样

 - (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
if ([url.host isEqualToString:@"pay"]) {
        // 处理微信的支付结果
        [WXApi handleOpenURL:url delegate:self];
    }
}

#pragma mark WXApiDelegate
-(void)onResp:(BaseResp *)resp{
    MDLog(@"========%d%@",resp.errCode,resp.errStr);
    if ([resp isKindOfClass:[SendAuthResp class]])//授权登录
    {
        SendAuthResp *rep = (SendAuthResp *)resp;
        if (rep.errCode == 0)//成功
        {
            [[NSNotificationCenter defaultCenter]postNotificationName:@"WXAuthorizationSuccess" object:@{@"code":rep.code}];
        }
    }

if([resp isKindOfClass:[PayResp class]])
    {
        // 支付返回结果,实际支付结果需要去微信服务器端查询
     
        strTitle = [NSString stringWithFormat:@"支付结果"];
         switch (resp.errCode)
        {
                // retcode 0:支付成功 -1:支付失败 -2:用户取消
            case WXSuccess:
                strMsg = @"支付成功!";
                NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);
                [[NSNotificationCenter defaultCenter]postNotificationName:@"PaySuccess" object:nil];
                
                break;
            default:
                if (resp.errCode == -2)
                {
                    strMsg = @"用户取消";
                }
                else if(resp.errCode == -1)
                {
                    strMsg = @"支付失败";
                }
                NSLog(@"支付结果:错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
                break;
        }
}
  • 然后在需要的页面监听支付回调,然后请求后台数据刷新页面

- (void)initView
{
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(paySuccess) name:@"PaySuccess" object:nil];
}
#pragma mark 付款成功之后刷新UI
- (void)paySuccess
{
    NSMutableDictionary *dict = [NSMutableDictionary new];
    [dict setObject:@"SSS" forKey:@"ctl"];
    [dict setObject:@"SSSS" forKey:@"act"];
    [self.httpsManager POSTWithParameters:dict SuccessBlock:^(NSDictionary *responseJson)
     {
         if (responseJson.success)
         {
             [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
         }     
     } FailureBlock:^(NSError *error)
     {
       
     }];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值