您的位置:首页 > 移动开发 > 微信开发

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

2016-07-21 17:15 706 查看
转自: iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客

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

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添加如下代码



这个大家都很熟练拉

第二步:

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



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

我们还回到上个页面.



微信:APPID:wx920fde9f97d60569

我们可以先使用这个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







- (IBAction)weChatPayButtonAction:(id)sender

{

PayReq *request = [[PayReq alloc] init];

/** 商家向财付通申请的商家id */

request.partnerId = @"1220277201";

/** 预支付订单 */

request.prepayId= @"82010380001603250865be9c4c063c30";

/** 商家根据财付通文档填写的数据和签名 */

request.package = @"Sign=WXPay";

/** 随机串,防重发 */

request.nonceStr= @"lUu5qloVJV7rrJlr";

/** 时间戳,防重发 */

request.timeStamp= 1458893985;

/** 商家根据微信开放平台文档对数据做的签名 */

request.sign= @"b640c1a4565b476db096f4d34b8a9e71960b0123";

/*! @brief 发送请求到微信,等待微信返回onResp

*

* 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持以下类型

* SendAuthReq、SendMessageToWXReq、PayReq等。

* @param req 具体的发送请求,在调用函数后,请自己释放。

* @return 成功返回YES,失败返回NO。

*/

[WXApi sendReq: request];

}

4、支付结果回调

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

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

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

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

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

[objc] view
plain copy







- (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];

}

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



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

[objc] view
plain copy







/*! @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;

}

}

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

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 CzechDanish
Dutch EnglishEsperanto
Estonian FilipinoFinnish
French GalicianGeorgian
German GreekGujarati
Haitian Creole HausaHebrew
HindiHmong
Hungarian IcelandicIgbo
Indonesian IrishItalian
Japanese JavaneseKannada
Kazakh KhmerKorean
Lao LatinLatvian
Lithuanian MacedonianMalagasy
Malay Malayalam
MalteseMaori Marathi
MongolianMyanmar (Burmese)
NepaliNorwegian Persian
PolishPortuguese Punjabi
RomanianRussian Serbian
SesothoSinhala Slovak
SlovenianSomali Spanish
SundaneseSwahili Swedish
TajikTamil Telugu
ThaiTurkish Ukrainian
UrduUzbek Vietnamese
WelshYiddish Yoruba
Zulu
Text-to-speech function is limited to 100 characters

Options : History : Help : FeedbackClose
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: