微信支付 到这下载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微信 下一篇讲解支付宝支付
//完