微信支付官方文档 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_1
并且在上面下载demo 和要用的类库 。微信的demo上有很多的功能 , 看上去可能有点乱 ,需要耐心一点 。
如果你在项目中做了ShearSDK的微信分享,那么你就有把原有的WXApi.h ,WXApiObject.h , libWetChatSDK这三个文件删除然后再重新导入一遍在微信官网上下载的这三个文件。PS:不会影响到分享。
第一步:
第二步:
第三步:
在AppDelegate中导入WXApi.h, 并签订协议WXApiDelegate。实现 -(void) onResp:(BaseResp*)resp方法
-(void) onResp:(BaseResp*)resp
{
NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
NSString *strTitle;
if([resp isKindOfClass:[SendMessageToWXResp class]])
{
strTitle = [NSString stringWithFormat:@"发送媒体消息结果"];
}
if([resp isKindOfClass:[PayResp class]]){
//支付返回结果,实际支付结果需要去微信服务器端查询
strTitle = [NSString stringWithFormat:@"支付结果"];
switch (resp.errCode) {
case WXSuccess:
strMsg = @"支付结果:成功!";
NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);
if([self.EventZFStr isEqualToString:@"Event"])
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"EventS" object:self];
}else{
[[NSNotificationCenter defaultCenter] postNotificationName:@"payWalletS" object:self];
}
break;
default:
strMsg = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
NSLog(@"错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
break;
}
}
}
第四步:
替换下图的参数
第五部在支付的视图中实现下面的方法
- (void)sendPay_demo:(NSMutableDictionary *)DIC
{
//{{{
//本实例只是演示签名过程, 请将该过程在商户服务器上实现
//创建支付签名对象
payRequsestHandler *req = [[payRequsestHandler alloc] init];
//初始化支付签名对象
[req init:APP_ID mch_id:MCH_ID];
//设置密钥
[req setKey:PARTNER_ID];
//}}}
NSString *moneyCount = [_textField.text stringByReplacingOccurrencesOfString:@"元" withString:@"" ];
NSInteger num = [moneyCount integerValue] * 100;
NSString *money = [ NSString stringWithFormat:@"%ld" , num];
//获取到实际调起微信支付的参数后,在app端调起支付
NSMutableDictionary *dict = [req sendPay_demo:[NSString stringWithFormat:@"%@" , [DIC objectForKey:@"ordernum"]] order_name:@"钱包充值" order_price:moneyCount];
if(dict == nil){
//错误提示
NSString *debug = [req getDebugifo];
NSLog(@"%@\n\n",debug);
}else{
NSLog(@"%@\n\n",[req getDebugifo]);
//[self alert:@"确认" msg:@"下单成功,点击OK后调起支付!"];
NSMutableString *stamp = [dict objectForKey:@"timestamp"];
//调起微信支付
PayReq* req = [[PayReq alloc] init];
req.openID = [dict objectForKey:@"appid"];
req.partnerId = [dict objectForKey:@"partnerid"];
req.prepayId = [dict objectForKey:@"prepayid"];
req.nonceStr = [dict objectForKey:@"noncestr"];
req.timeStamp = stamp.intValue;
req.package = [dict objectForKey:@"package"];
req.sign = [dict objectForKey:@"sign"];
AppDelegate *appDelegate=[[UIApplication sharedApplication] delegate];
appDelegate.EventZFStr = [NSString stringWithFormat:@"wallet"];
[WXApi sendReq:req];
}
}
微信支付的大概流程就是这样的。。
在做微信支付的时候要用真机测试 , 因为它要调用微信的客户端 。还支付的时候微信的金额是以分为单位的,所以要注意金额的转换!