1.支付流程图
2. 官方网站下载以下文件
3.Build Phases ---> Link Binary With Libraries中引入以下库文件
SystemConfiguration.framework
libz.tbd
libsqlite3.0.tbd
CoreTelephony.framework
QuartzCore.framework
SystemConfiguration.framework
libc++.tbd
CFNetwork.framework
4. 在工程配置中的”Other Linker Flags”中加入”-ObjC -all_load”
5.设置URL Scheme
在注册微信平台APP的时候,会给一个唯一识别标识符(APPID),需要填在URL Schemes这个地方,
6.在Appdelegate中注册APPID < 引入头文件#import "WXApi.h">
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {// Override point for customization after application launch.
/*向微信终端注册ID,这里的APPID一般建议写成宏,容易维护。@“测试demo”不需用管。这里的id是假的,需要改这里还有target里面的URL Type*/
[WXApi registerApp:@"wxd930ea5d5a258f4f"withDescription:@"测试demo"];returnYES;
}
7. 处理微信通过URL启动时传递的数据 < 引入头文件#import "WXApi.h">
//前面的两个方法被iOS9弃用了,如果是Xcode7.2网上的话会出现无法进入进入微信的onResp回调方法,就是这个原因。本来我是不想写着两个旧方法的,但是一看官方的demo上写的这两个,我就也写了。。。。
//9.0前的方法,为了适配低版本 保留
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url{
return[WXApi handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{
return[WXApi handleOpenURL:url delegate:self];
}
//9.0后的方法
- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options{
//这里判断是否发起的请求为微信支付,如果是的话,用WXApi的方法调起微信客户端的支付页面(://pay 之前的那串字符串就是你的APPID,)
return[WXApi handleOpenURL:url delegate:self];
}
//微信SDK自带的方法,处理从微信客户端完成操作后返回程序之后的回调方法,显示支付结果的
-(void) onResp:(BaseResp*)resp{
//启动微信支付的
responseNSString*payResoult = [NSStringstringWithFormat:@errcode:%d, resp.errCode];
if([resp isKindOfClass:[PayResp class]]){
//支付返回结果,实际支付结果需要去微信服务器端查询
switch(resp.errCode) {
case 0:
payResoult = @支付结果:成功!;break;
case-1:
payResoult = @支付结果:失败!;break;
case-2:
payResoult = @用户已经退出支付!;break;
default:
payResoult = [NSStringstringWithFormat:@支付结果:失败!retcode = %d, retstr = %@, resp.errCode,resp.errStr];break;
}
}
}
8.在要发起支付的地方执行下面的代码< 引入头文件#import "WXApi.h">
// 首先调用后端接口获取订单相关参数和签名
// req对象所有属性值通过后端返回
PayReq* req = [[PayReq alloc] init];
req.partnerId = returnData[@"payeeOrder"] [@"partnerid"];
req.prepayId = returnData[@"payeeOrder"] [@"prepayid"];
req.nonceStr = returnData[@"payeeOrder"] [@"noncestr"];
req.timeStamp = [returnData[@"payeeOrder"] [@"timestamp"] intValue];
req.package = [NSString stringWithFormat:@"%@", @"Sign=WXPay"];
req.sign = returnData[@"payeeOrder"] [@"sign"];
[WXApi sendReq:req];
//日志输出
QLLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",[NSString stringWithFormat:@"%@", [returnData objectForKey:@"AppID"]],req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign );