iOS中 最新微信支付/最全的微信支付教程详解-阿里云开发者社区

开发者社区> ghost丶桃子> 正文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
4059 0
使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程
使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程 转载地址:http://swift.gg/2016/06/28/adding-siri-to-ios-10-apps-in-swift-tutorial/ 下载 Xcode 8,配置 iOS 10 和 Swift 3 (可选)通过命令行编译 除非你想使用命令行编译,使用 Swift 3.0 的工具链并不需要对项目做任何改变。
1087 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4462 0
iOS中 Bugly iOS 符号表手动配置详细教程 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang  新浪微博!iOS开发者交流QQ群: 446310206 官方教程官方的符号表工具iOS文档版­使用指南不是很详细,于是自己动手写一个更加详细的教程方便大家阅读。
882 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
5723 0
1955
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载