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

依赖库

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


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

URL type

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

import "WXApi.h"

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请求调用后,会切到微信终端程序界面。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言:本篇文章目的在于梳理知识,巩固思想,学习总结。有什么好的建议,都可以留言。互相促进!总观,微信支付,也没心思...
    麦穗0615阅读 10,088评论 8 70
  • 前提是已经创建完应用了在微信的官网上。根据上一篇的微信获得支付能力的步骤,这一篇主要制作微信支付的demo。回顾上...
    阳光的大男孩儿阅读 24,323评论 28 50
  • 最近做了一个新项目,涉及到支付宝和微信支付,支付宝和微信都是业界的老大哥,相信大家都有所觉得文档、SDK都是各种坑...
    smile丽语阅读 2,425评论 2 19
  • 看到个不错的微信集成帖子,分享给大家!(因为微信支付也真是够恶心的,TM要配置什么环境都没说,肯定很多新手会被恶心...
    白屏阅读 1,184评论 0 48
  • 前言:之前听说过微信支付有很多坑,其实没有想象的那么坑,整体感觉很容易上手,按照它的流程来不会有错!PS:官方的流...
    li大鹏阅读 4,868评论 5 41