首先还是要去注册微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回AppID、微信支付商户号、API秘钥(自己设置即可,注意一定要32位字母加数字的组合)。
然后,去下载sdk,[微信SDK下载](https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319164&lang=zh_CN
下载好后,将SDK包里面的libWeChatSDK.a、WechatAuthSDK.h、WXApi.h、WXApiObject.h这四个拷贝到你的工程里面
拷贝后添加所需的依赖库
SystemConfiguration.framework
libz.tbd
libsqlite3.0.tbd
CoreTelephony.framework
libc++.tbd
libsqlite3.0.tbd
CoreTelephony.framework
libc++.tbd
依赖库添加完后就是在Info.plist添加下面的字段
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
字段添加完就在Build Settings里面找到Other Linker Flags 加入-Objc -all_load
最后,因为要应用跳转,所以进入Info里面的URL Types将APPID添加到里面
这些都弄完以后进入工程里面,在AppDelegate.m导入#import "WXApi.h",导入后进行注册
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[WXApi registerApp:@"wx930fde9f97d60569"];//@"wx930fde9f97d60569"是APPID
return YES;
}
再在AppDelegate.m里面遵守<WXApiDelegate>协议
遵守协议后在AppDelegate.m里面添加下面的代码
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
/*! @brief 处理微信通过URL启动App时传递的数据
*
* 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。
* @param url 微信启动第三方应用时传递过来的URL
* @param delegate WXApiDelegate对象,用来接收微信触发的消息。
* @return 成功返回YES,失败返回NO。
*/
return [WXApi handleOpenURL:url delegate:self];
}
/*! @brief 发送一个sendReq后,收到微信的回应
*
* 收到一个来自微信的处理结果。调用一次sendReq后会收到onResp。
* 可能收到的处理结果有SendMessageToWXResp、SendAuthResp等。
* @param resp具体的回应内容,是自动释放的
*/
- (void)onResp:(BaseResp *)resp
{
//支付返回结果,实际支付结果需要去微信服务器端查询
NSString *strMsg = [NSString stringWithFormat:@"支付结果"];
switch (resp.errCode) {
case WXSuccess:
strMsg = @"支付结果:成功!";
NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);
break;
default:
strMsg = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
NSLog(@"错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
break;
}
}
再到要实现支付的ViewController.m里面导入#import "WXApi.h",我是点击微信支付按钮跳转到支付页面,在按钮的点击事件里面添加下面的代码
PayReq *request = [[PayReq alloc] init];
/** 商家向财付通申请的商家id */
request.partnerId = @"10000100";
/** 预支付订单 */
request.prepayId= @"1101000000140415649af9fc314aa427";
/** 商家根据财付通文档填写的数据和签名 */
request.package = @"Sign=WXPay";
/** 随机串,防重发 */
request.nonceStr= @"a462b76e7436e98e0ed6e13c64b4fd1c";
/** 时间戳,防重发 */
request.timeStamp= 1397527777;
/** 商家根据微信开放平台文档对数据做的签名 */
request.sign= @"582282D72DD2B03AD892830965F428CB16E7A256";
/*! @brief 发送请求到微信,等待微信返回onResp
*
* 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持以下类型
* SendAuthReq、SendMessageToWXReq、PayReq等。
* @param req 具体的发送请求,在调用函数后,请自己释放。
* @return 成功返回YES,失败返回NO。
*/
[WXApi sendReq: request];