iOS集成微信支付

照着官网写好了 支付直接报败,挫败~~~

先把官方demo下载下来,可以本地倒入sdk,我是适用的pods,因为之前已经集成了分享功能,已经有微信的sdk了,所以我只需要倒入XMLDictionary、DataMD5这俩工具类到我的项目,这个我放本地了,还有一点需要注意的是,集成过微信之后,做支付的时候,注册微信注意放到分享之后!!

我的didFinishLaunchingWithOptions方法里这样写的:

- (void)registerApp {

//打开日志

[[UMSocialManager defaultManager] openLog:YES];

// 获取友盟social版本号

NSLog(@"UMeng social version: %@", [UMSocialGlobal umSocialSDKVersion]);

//设置友盟appkey

[[UMSocialManager defaultManager] setUmSocialAppkey:UmSocialAppkey];

//设置微信的appKey和appSecret

[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:WeiXinAppKey appSecret:WeiXinAppSecret redirectURL:@"http://sns.whalecloud.com"];

//设置分享到QQappID

[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:QQAppKey/*设置QQ平台的appID*/  appSecret:QQAppSecret redirectURL:@"http://sns.whalecloud.com"];

//微博的appKey

[[UMSocialManager defaultManager] setPlaform: UMSocialPlatformType_Sina appKey:WeiBoAppKey appSecret:WeiBoAppSecret redirectURL:@"http://sns.whalecloud.com"];

// 微信支付 有分享的时候 注册放在分享后面

[WXApi registerApp:WeiXinAppKey];

}

具体的介绍看官方和百度,我这里记录一下自己出问题的地方:

1、下单、签名操在后台完成:

需要的参数包括:appid、partid(商户号)、prepayid(预支付订单ID)、noncestr(参与签名的随机字符串)、timestamp(参与签名的时间戳)、sign(签名字符串)这六个大概;

2、客户端拿着这些参数掉起支付:

//需要创建这个支付对象

PayReq *req = [[PayReq alloc] init];

//由用户微信号和AppID组成的唯一标识,用于校验微信用户

req.openID = WeiXinAppKey;

// 商家id,在注册的时候给的

req.partnerId = orderInfo[@"mch_id"];

// 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你

req.prepayId  = orderInfo[@"prepay_id"];

// 根据财付通文档填写的数据和签名

//这个比较特殊,是固定的,只能是即req.package = Sign=WXPay

req.package  = @"Sign=WXPay";

// 随机编码,为了防止重复的,在后台生成

req.nonceStr  = orderInfo[@"nonce_str"];

// 这个是时间戳,也是在后台生成的,为了验证支付的

//将当前事件转化成时间戳

NSDate *datenow = [NSDate date];

NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[datenow timeIntervalSince1970]];

UInt32 timeStamp =[timeSp intValue];

req.timeStamp= timeStamp;

// 签名加密

DataMD5 *md5 = [[DataMD5 alloc] init];

req.sign=[md5 createMD5SingForPay:req.openID partnerid:req.partnerId prepayid:req.prepayId package:req.package noncestr:req.nonceStr timestamp:req.timeStamp];

//发送请求到微信,等待微信返回onResp

BOOL status = [WXApi sendReq:req];

3、得到支付结果,在AppDelegate.m文件里吗写回调的通知:

//微信SDK自带的方法,处理从微信客户端完成操作后返回程序之后的回调方法,显示支付结果的

-(void)onResp:(BaseResp*)resp

{

//启动微信支付的response

if([resp isKindOfClass:[PayResp class]]){

[[NSNotificationCenter defaultCenter] postNotificationName:@"WXpayresult" object:[NSString stringWithFormat:@"%d",resp.errCode]];

}

}

在发起支付的地方监听到回掉消息做相应处理:

- (void)viewDidLoad {

[super viewDidLoad];

// 注册监听 - 微信支付结果

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showWXPayResult:) name:@"WXpayresult" object:nil];

}

- (void)viewDidDisappear:(BOOL)animated {

[super viewDidDisappear:animated];

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

#pragma mark 微信支付的结果

- (void)showWXPayResult:(NSNotification *)notification {

NSString *result = notification.object;

//支付返回结果,实际支付结果需要去微信服务器端查询

NSString *payResoult = @"";

if (result.intValue == 0) {

payResoult = @"支付结果:成功!";

}else {

self.payResult = NO;

switch (result.intValue) {

case -1:

payResoult = @"支付结果:失败!";

break;

case -2:

payResoult = @"用户已经退出支付!";

break;

default:

payResoult = [NSString stringWithFormat:@"支付结果:失败!retcode = %d", result.intValue];

break;

}

UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"提示" message:payResoult delegate:nil cancelButtonTitle:@"好的" otherButtonTitles: nil];

[alert show];

}

}

你可能感兴趣的:(iOS集成微信支付)