iOS 微信支付

步骤 1 下载微信终端SDK文件
SDK文件包括 libWeChatSDK.a,WXApi.h,WXApiObject.h

SDK

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319164&lang=zh_CN
步骤 2 添加依赖库
微信开放平台新增了微信模块用户统计功能,便于开发者统计微信功能模块的用户使用和活跃情况。开发者需要在工程中链接上:SystemConfiguration.framework, libz.dylib, libsqlite3.0.dylib, libc++.dylib, Security.framework, CoreTelephony.framework, CFNetwork.framework

iOS 微信支付_第1张图片
依赖库

步骤 3 在你的工程文件中选择Build Setting,在"Other Linker Flags"中加入"-Objc -all_load",在Search Paths中添加 libWeChatSDK.a ,WXApi.h,WXApiObject.h,文件所在位置(如下图所示)
iOS 微信支付_第2张图片


步骤 4 在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序id(如下图所示)。

iOS 微信支付_第3张图片
URL type

步骤 5 在你需要使 用微信终端API的文件中import WXApi.h 头文件,并增加 WXApiDelegate 协议。

import "WXApi.h"

iOS 微信支付_第4张图片
AppDelegate

步骤 6 在代码中使用开发工具包
[1] 要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id。(如下图所示,在 AppDelegate 的 didFinishLaunchingWithOptions 函数中向微信注册id)。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //微信注册
    [WXApi registerApp:WXAPPID];
    return YES;
}

[2] 重写AppDelegate的handleOpenURL和openURL方法:

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    
    if ([url.scheme isEqualToString:WXAPPID]){
        return  [WXApi handleOpenURL:url delegate:self];
    }
    return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    if ([url.scheme isEqualToString:WXAPPID]){
        return  [WXApi handleOpenURL:url delegate:self];
    }
    return YES;
}

[3] 如果你的程序要发消息给微信,那么需要调用WXApi的sendReq函数

//从服务器请求到的数据
PayReq* req             = [[PayReq alloc] init];
req.openID              = [[responseObject objectForKey:@"response"] objectForKey:@"appid"];                //应用ID
req.partnerId           = [[responseObject objectForKey:@"response"] objectForKey:@"partnerid"];            //商户号
req.prepayId            = [[responseObject objectForKey:@"response"] objectForKey:@"prepayid"];             //预支付交易会话ID
req.nonceStr            = [[responseObject objectForKey:@"response"] objectForKey:@"noncestr"];             //随机字符串
req.timeStamp           = [[[responseObject objectForKey:@"response"] objectForKey:@"timestamp"] intValue]; //时间戳
req.package             = [[responseObject objectForKey:@"response"] objectForKey:@"package"];              //扩展字段
req.sign                = [[responseObject objectForKey:@"response"] objectForKey:@"sign"];                 //签名
[WXApi sendReq:req];

[4]现在,你的程序要实现和微信终端交互的具体请求与回应,因此需要实现WXApiDelegate协议的两个方法:

-(void) onReq:(BaseReq*)req
onReq是微信终端向第三方程序发起请求,要求第三方程序响应。第三方程序响应完后必须调用sendRsp返回。在调用sendRsp返回时,会切回到微信终端程序界面。
-(void) onResp:(BaseResp*)resp
如果第三方程序向微信发送了sendReq的请求,那么onResp会被回调。sendReq请求调用后,会切到微信终端程序界面。

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