然后,在需要调用微信支付的Controller里面,新建一个方法。在合适的地方调用。这个方法里面利用WechatPayManager这个类进行了初始化和参数封装,然后把上述的核心代码(PayReq那一段)
<code class="hljs" objectivec="">- (void)wxPayWithOrderName:(NSString*)name price:(NSString*)price
{
//创建支付签名对象 && 初始化支付签名对象
WechatPayManager* wxpayManager = [[[WechatPayManager alloc]initWithAppID:APP_ID mchID:MCH_ID spKey:PARTNER_ID] autorelease];
//获取到实际调起微信支付的参数后,在app端调起支付
//生成预支付订单,实际上就是把关键参数进行第一次加密。
NSString* device = [[UserManager defaultManager]userId];
NSMutableDictionary *dict = [wxpayManager getPrepayWithOrderName:name
price:price
device:device];
if(dict == nil){
//错误提示
NSString *debug = [wxpayManager getDebugInfo];
return;
}
NSMutableString *stamp = [dict objectForKey:@timestamp];
//调起微信支付
PayReq* req = [[[PayReq alloc] init]autorelease];
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];
// BOOL flag = [WXApi sendReq:req];
BOOL flag = [WXApi safeSendReq:req];
}</code>
再者,支付完成了需要调用一个delegate,这个delegate方便个性化显示支付结果。一般直接把这两个delegate放在AppDelegate就好了。因为有一些其他内容也是需要在AppDelegate里面实现,省的分开找不到。
<code class="hljs" objectivec="">-(void) onResp:(BaseResp*)resp
{
//启动微信支付的response
NSString *strMsg = [NSString stringWithFormat:@errcode:%d, resp.errCode];
if([resp isKindOfClass:[PayResp class]]){
//支付返回结果,实际支付结果需要去微信服务器端查询
switch (resp.errCode) {
case 0:
strMsg = @支付结果:成功!;
break;
case -1:
strMsg = @支付结果:失败!;
break;
case -2:
strMsg = @用户已经退出支付!;
break;
default:
strMsg = [NSString stringWithFormat:@支付结果:失败!retcode = %d, retstr = %@, resp.errCode,resp.errStr];
break;
}
}
}</code>
注意事项:
1)如果APP里面已经使用了ShareSDK,就有一些地方要注意。不要再重复导入微信的SDK,因为shareSDK里面的extend已经包括了微信的SDK。










