iOS之微信支付

1.iOS微信支付解析

2.向微信注册appid

在AppDelegate.m中 即
- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions {

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

//5AUC为百度地图的appkey
//启动BaiduMapManager
self.mapManager = [[BMKMapManager alloc] init];
BOOL ret = [self.mapManager start:@"地图appkey" generalDelegate:self];

if (!ret) {
    NSLog(@"百度地图开启");
}

self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
GifViewViewController *rootC = [[GifViewViewController alloc] init];
UINavigationController *naVC = [[UINavigationController alloc] initWithRootViewController:rootC];
self.window.rootViewController = naVC;

//向微信注册(微信支付使用)
[WXApi registerApp:@"微信appid" withDescription:nil];

}

3. 在下面函数

-(BOOL)application:(UIApplication )application openURL:(NSURL )url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{

BOOL result = [UMSocialSnsService handleOpenURL:url];
if (result == FALSE) {

    //友盟调用其他SDK,例如支付宝SDK、微信支付等(没用友盟写在result外面就可以了)

    //微信支付函数
    [WXApi handleOpenURL:url delegate:self];

}
return result;

}

4.在下面函数(微信代理函数) 获取支付结果

//微信跳转支付后获取的支付信息
-(void)onResp:(BaseResp *)resp{

NSString *strTitle;
if ([resp isKindOfClass:[SendMessageToWXResp class]]) {
    strTitle = [NSString stringWithFormat:@"发送媒体消息结果"];
}
if ([resp isKindOfClass:[PayResp class]]) {
    strTitle = [NSString stringWithFormat:@"支付结果"];
    switch (resp.errCode) {
        case WXSuccess:
        {
            [[NSNotificationCenter defaultCenter] postNotificationName:kOrderCompleteNotification object:nil];
            [SVProgressHUD showErrorWithStatus:@"您已支付成功"];
            NSLog(@"支付结果: 成功!");
        }
            break;
        case WXErrCodeCommon:
        { //签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等
            [SVProgressHUD showErrorWithStatus:@"支付结果: 失败!"];
            NSLog(@"支付结果: 失败!");
        }
            break;
        case WXErrCodeUserCancel:
        { //用户点击取消并返回
            NSLog(@"点击取消");
            [SVProgressHUD showErrorWithStatus:@"取消支付成功"];
        }
            break;
        case WXErrCodeSentFail:
        { //发送失败
            NSLog(@"发送失败");
            [SVProgressHUD showErrorWithStatus:@"发送失败"];
        }
            break;
        case WXErrCodeUnsupport:
        { //微信不支持
            NSLog(@"微信不支持");
            [SVProgressHUD showErrorWithStatus:@"微信不支持"];
        }
            break;
        case WXErrCodeAuthDeny:
        { //授权失败
            NSLog(@"授权失败");
            [SVProgressHUD showErrorWithStatus:@"授权失败"];
        }
            break;
        default:
            break;
    }
    //------------------------
}

}

5.应用微信支付界面要从服务器获取 信息例如签名、微信分配商户号、时间戳等

-(void)toWeiXin:(NSMutableDictionary *)dictionary
{

//以下参数可能是在后台获取
//微信订单完成通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(wxOrderComplete:)name:kOrderCompleteNotification object:nil];
//调起微信支付
    PayReq* req = [[PayReq alloc] init];
    req.partnerId  = [dictionary objectForKey:@"partnerid"];                   //微信支付分配商户号
    req.prepayId   = [dictionary objectForKey:@"prepayid"];                    //微信返回的支付交易会话ID
    req.nonceStr   = [dictionary objectForKey:@"noncestr"];                    //随机字符串
    req.timeStamp  = [[dictionary objectForKey:@"timestamp"] intValue];        //时间戳
    req.package    = [dictionary objectForKey:@"package"];                     //暂填写固定值Sign=WXPay
    req.sign       = [dictionary objectForKey:@"sign"];                        //签名
    NSLog(@"dictionary  %@",dictionary);
    [WXApi sendReq:req];

}

6.注意要点

因为微信的官方群文档不是很让人理解 所以服务器做这些参数数据有点坑,所以重点还是在后台 前段不是太多麻烦事
也可以自己生成订单号之类的,不过需要我们自己做些事情,这里我们就不多说了,可下载一些demo参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值