iOS中 最新微信支付/最全的微信支付教程详解

简介:

每日更新关注:http://weibo.com/hanjunqiang  新浪微博!

亲们, 首先让我们来看一下微信支付的流程吧.

1. 注册微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回一些参数.

2. 下载微信支付sdk

3. 客户端请求订单,后台与微信后台交互,返回给客户端支付参数

4. 调用微信客户端,由微信客户端和微信服务器打交道;

5. 客户端和服务端都会收到支付结果;(前台消息不可靠,我们需要去后台验证,如果后台没有收到支付通知,后台去微信服务器验证然后将结果返回给客户端)


支付流程图(大家看一下支付流程).


那么我们现在就开始写微信支付的demo了.

开发步骤

1:去微信开放平台注册应用

https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN&token=2c0fee9c43e1eb8f9febcc7cb73abf598e2d4011


创建移动应用并成功之后会收到腾讯发来的邮件


通过邮件我们能获得重要的参数:

(1):AppID

(2):微信支付商户号

(4):前往商户平台完成入驻

(4):API秘钥(自己设置即可,注意一定要32位字母加数字的组合)记得保存好秘钥,以后要使用




有了这些参数后,我们就可以开发自己的项目了.

接下来, 我们就新建一个微信工程吧.

创建好工程以后呢, 我们去微信平台下载sdk

链接: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5#



下载好以后呢, 我们就开始集成SDK了





把左边的SDK拉到工程里面哦.

大家会看到文件夹里面有集成SDK的步骤.


第一步: 在info.plist添加如下代码

每日更新关注:http://weibo.com/hanjunqiang  新浪微博!


这个大家都很熟练拉

第二步:

添加需要的框架和依赖库 (ps: 官方文档没让添加libc++.tbd, 这点也是工程报错的时候发现的...)



剩下的事情, 我们只需要按照官方文档来做就行了, 亲们.


我们还回到上个页面.



微信:APPID:wx920fde9f97d60569

每日更新关注:http://weibo.com/hanjunqiang  新浪微博!

我们可以先使用这个APPID   (ps: 这是同事的前公司的应用ID)

1、项目设置APPID

商户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性中的URL Schemes为您的APPID。

这个我们按照文档做一下就可以了.


2、注册APPID

商户APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID,代码如下:

[WXApi registerApp:@"wxd930ea5d5a258f4f];


3、调起支付

商户服务器生成支付订单,先调用【统一下单API】生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付。以下是调起微信支付的关键代码:

现在我们只需要在控制器上添加一个button, 名字改成微信支付就可以了

button事件:

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. - (IBAction)weChatPayButtonAction:(id)sender  
  2. {  
  3.     PayReq *request = [[PayReq alloc] init];  
  4.     /** 商家向财付通申请的商家id */  
  5.     request.partnerId = @"1220277201";  
  6.     /** 预支付订单 */  
  7.     request.prepayId@"82010380001603250865be9c4c063c30";  
  8.     /** 商家根据财付通文档填写的数据和签名 */  
  9.     request.package = @"Sign=WXPay";  
  10.     /** 随机串,防重发 */  
  11.     request.nonceStr@"lUu5qloVJV7rrJlr";  
  12.     /** 时间戳,防重发 */  
  13.     request.timeStamp1458893985;  
  14.     /** 商家根据微信开放平台文档对数据做的签名 */  
  15.     request.sign@"b640c1a4565b476db096f4d34b8a9e71960b0123";  
  16.     /*! @brief 发送请求到微信,等待微信返回onResp 
  17.      * 
  18.      * 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持以下类型 
  19.      * SendAuthReq、SendMessageToWXReq、PayReq等。 
  20.      * @param req 具体的发送请求,在调用函数后,请自己释放。 
  21.      * @return 成功返回YES,失败返回NO。 
  22.      */  
  23.     [WXApi sendReq: request];  
  24. }  

每日更新关注:http://weibo.com/hanjunqiang  新浪微博!

4、支付结果回调

按照微信SDKSample,在类实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错

误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意

一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。

这是最后一步了, 我们在支付页面支付完成以后呢要知道支付结果, 怎么做呢?

首先, 在AppDelegate.m里面实现该方法


[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options  
  2. {  
  3.     /*! @brief 处理微信通过URL启动App时传递的数据 
  4.      * 
  5.      * 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。 
  6.      * @param url 微信启动第三方应用时传递过来的URL 
  7.      * @param delegate  WXApiDelegate对象,用来接收微信触发的消息。 
  8.      * @return 成功返回YES,失败返回NO。 
  9.      */  
  10.     return [WXApi handleOpenURL:url delegate:self];  
  11. }  

接下来我们需要遵守下协议


每日更新关注:http://weibo.com/hanjunqiang  新浪微博!


最后一步, 就等支付结果出来以后回调一个函数了

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /*! @brief 发送一个sendReq后,收到微信的回应 
  2.  * 
  3.  * 收到一个来自微信的处理结果。调用一次sendReq后会收到onResp。 
  4.  * 可能收到的处理结果有SendMessageToWXResp、SendAuthResp等。 
  5.  * @param resp具体的回应内容,是自动释放的 
  6.  */  
  7. - (void)onResp:(BaseResp *)resp  
  8. {  
  9.     //支付返回结果,实际支付结果需要去微信服务器端查询  
  10.     NSString *strMsg = [NSString stringWithFormat:@"支付结果"];  
  11.     switch (resp.errCode) {  
  12.         case WXSuccess:  
  13.             strMsg = @"支付结果:成功!";  
  14.             NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);  
  15.             break;  
  16.         default:  
  17.             strMsg = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];  
  18.             NSLog(@"错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr);  
  19.             break;  
  20.     }  
  21. }  

这样, 我们就完成了微信支付iOS客户端的代码,了解更多请关注博主微博:

每日更新关注:http://weibo.com/hanjunqiang  新浪微博!

Demo下载地址:https://github.com/XiaoHanGe/WeChatPay.git
ps: 大家工作中写完以后要在真机上测试.

G
M
T
Detect language AfrikaansAlbanian ArabicArmenianAzerbaijani BasqueBelarusian BengaliBosnianBulgarian CatalanCebuanoChichewa Chinese (Simplified)Chinese (Traditional) CroatianCzechDanish DutchEnglishEsperanto EstonianFilipinoFinnish FrenchGalicianGeorgian GermanGreekGujarati Haitian CreoleHausaHebrew HindiHmong HungarianIcelandicIgbo IndonesianIrishItalian JapaneseJavaneseKannada KazakhKhmerKorean LaoLatinLatvian LithuanianMacedonianMalagasy MalayMalayalam MalteseMaoriMarathi MongolianMyanmar (Burmese) NepaliNorwegianPersian PolishPortuguesePunjabi RomanianRussianSerbian SesothoSinhalaSlovak SlovenianSomaliSpanish SundaneseSwahiliSwedish TajikTamilTelugu ThaiTurkishUkrainian UrduUzbekVietnamese WelshYiddishYoruba Zulu
Afrikaans AlbanianArabicArmenian AzerbaijaniBasqueBelarusian BengaliBosnian BulgarianCatalanCebuano ChichewaChinese (Simplified) Chinese (Traditional)Croatian CzechDanishDutch EnglishEsperantoEstonian FilipinoFinnishFrench GalicianGeorgianGerman GreekGujaratiHaitian Creole HausaHebrew HindiHmongHungarian IcelandicIgboIndonesian IrishItalianJapanese JavaneseKannadaKazakh KhmerKoreanLao LatinLatvianLithuanian MacedonianMalagasyMalay MalayalamMalteseMaori MarathiMongolianMyanmar (Burmese) NepaliNorwegian PersianPolishPortuguese PunjabiRomanianRussian SerbianSesothoSinhala SlovakSlovenianSomali SpanishSundaneseSwahili SwedishTajikTamil TeluguThaiTurkish UkrainianUrduUzbek VietnameseWelshYiddish YorubaZulu  
 
Text-to-speech function is limited to 100 characters
Options :  History :  Help :  Feedback Close

相关文章
|
10天前
|
安全 API Windows
支付系统13------支付系统的资料在技术库里的在线支付当中,怎样获取微信平台证书那?怎样获取微信平台证书那?第一步打开我们的微信支付平台的文档中心
支付系统13------支付系统的资料在技术库里的在线支付当中,怎样获取微信平台证书那?怎样获取微信平台证书那?第一步打开我们的微信支付平台的文档中心
|
10天前
|
存储
支付系统36-------订单表优化,添加payment_type字段,无论是微信支付还是支付宝支付都放到 t_order_info表中了,payment_type用来判断支付宝还是微信支付的
支付系统36-------订单表优化,添加payment_type字段,无论是微信支付还是支付宝支付都放到 t_order_info表中了,payment_type用来判断支付宝还是微信支付的
|
11天前
|
小程序
【微信小程序-原生开发】富文本编辑器 editor 的使用教程
【微信小程序-原生开发】富文本编辑器 editor 的使用教程
18 0
【微信小程序-原生开发】富文本编辑器 editor 的使用教程
|
10天前
|
JavaScript
支付系统---微信支付23-数据绑定和事件,使用Vue调试要添加扩展,F12与console平级就出现了Vue,在支付资料,微信支付,04资料,工具里
支付系统---微信支付23-数据绑定和事件,使用Vue调试要添加扩展,F12与console平级就出现了Vue,在支付资料,微信支付,04资料,工具里
|
10天前
|
API
支付系统----微信支付24--APlv3介绍,首先我们要引入支付参数,包含商户号,APPID、API秘钥,数字证书,用代码加载到应用程序当中,之后加载商户私钥,商户需要用私钥进行验签,微信平台接收商
支付系统----微信支付24--APlv3介绍,首先我们要引入支付参数,包含商户号,APPID、API秘钥,数字证书,用代码加载到应用程序当中,之后加载商户私钥,商户需要用私钥进行验签,微信平台接收商
|
11天前
|
小程序 前端开发
【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)
【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)
26 0
|
11天前
|
小程序
【微信小程序-原生开发】实用教程21 - 分包
【微信小程序-原生开发】实用教程21 - 分包
11 0
|
11天前
|
前端开发 小程序
【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)
【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)
16 0
|
11天前
|
小程序 C++
【微信小程序-原生开发】实用教程19 - 表单范例 VS 表单校验(含必填校验函数封装,实时数字校验)
【微信小程序-原生开发】实用教程19 - 表单范例 VS 表单校验(含必填校验函数封装,实时数字校验)
14 0
|
11天前
|
小程序
【微信小程序-原生开发】实用教程18 - 九宫格、底部悬停按钮、页内悬浮按钮、拨打电话、一键复制
【微信小程序-原生开发】实用教程18 - 九宫格、底部悬停按钮、页内悬浮按钮、拨打电话、一键复制
9 0

相关实验场景

更多