澳门威利斯人_威利斯人娱乐「手机版」

来自 办公软件 2020-03-18 05:12 的文章
当前位置: 澳门威利斯人 > 办公软件 > 正文

微信支付与微信应用间跳转,微信支付全部流程

前言:此前据书上说过Wechat支付有大多坑,其实未有想象的那么坑,全部感到相当轻易上手,根据它的流水生产线来不会有错!PS:官方的流程看的TMD烦,好啊,废话有一点点多,步向支付。(ps:种种Wechat的本子平昔都在改过,那是2014/12/1给你们做的标记下QQ:1055167383,招待随意打扰,女士优先!大神也早期!咦…)

一. 支付思索职业

岁尾了,平素在忙项目,比超级少不常候写一些要好的眼光。前天抽取一些年华来写一下正好完结的Wechat的支出和跳转到微信的效应。

  1. 导入Wechat支付库
  1. Wechat相关希图职业

如若你还尚未做过,可以看一下,作为参谋。假若您做过那些了,也能够看一下。简单的说一句话:有钱的捧个钱场,没钱的捧个人场。......

Wechat开放平台新添了Wechat模块客商总结效用,便于开荒者总计Wechat作用模块的客商接收和活跃状态。开采者要求在工程中链接上:SystemConfiguration.framework,libz.dylib,libsqlite3.0.dylib。

(1卡塔尔(قطر‎ 向Wechat官方开通支付功用. 那个不是后边三个的工作.

本人那是借助二〇一六年112月在Wechat官方网站下载的demo写的开支,若是和你做过的不相符,请查看咱们三个的本子是或不是同样。

最珍视的时那几个库:libc .dylib《ps:官方的文书档案没说,艹!》

(2卡塔尔 导入官方下载的Wechat支付SDK包. 作者用的是Wechat开放平台下载的风行SDK

第一,作者个人感到Wechat以往的iOS版的前端代码比原先的简化了有的,现在的官方网站的demo最大的一点是不在前端放置任何数据了,都以一个接口乞求下来(前三个本子依然在前面八个有一个Wechat设置例子,只是提出说后台给多少)。

2.在AppDelegate中导入:

(3State of Qatar 导入供给的库文件

开拓和合法demo里面包车型客车read.text说的一律,需求两步:调用乞请支付,重临支付结果。

#import "WXApi.h"

SystemConfiguration.framework,

(NSString *)jumpToBizPay {

//============================================================

// V3&V4支付流程达成

// 注意:参数配置请查看服务器端德姆o

// 更新时间:二〇一四年五月19日

//============================================================

NSString *urlString = @"";

//拆解深入分析服务端重回json数据

NSError *error;

//加载贰个NSU讴歌MDXL对象

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];

//将央浼的url数据放到NSData对象中

NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

if ( response != nil) {

NSMutableDictionary *dict = NULL;

//IOS5自带分析类NSJSON塞里alization从response中深入分析出多少放到字典中

dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];

NSLog(@"url:%@",urlString);

if(dict != nil){

NSMutableString *retcode = [dict objectForKey:@"retcode"];

if (retcode.intValue == 0){

NSMutableString *stamp = [dict objectForKey:@"timestamp"];

//调起微信支付

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

req.partnerId = [dict objectForKey:@"partnerid"];

req.prepayId = [dict objectForKey:@"prepayid"];

req.nonceStr = [dict objectForKey:@"noncestr"];

req.timeStamp = stamp.intValue;

req.package = [dict objectForKey:@"package"];

req.sign = [dict objectForKey:@"sign"];

[WXApi sendReq:req];

//日志输出

NSLog(@"appid=%@npartid=%@nprepayid=%@nnoncestr=%@ntimestamp=%ldnpackage=%@nsign=%@",[dict objectForKey:@"appid"],req.partnerId,req.prepayId,req.nonceStr,req.timeStamp,req.package,req.sign );

return @"";

}else{

return [dict objectForKey:@"retmsg"];

}

}else{

return @"服务器重返错误,未得到到json对象";

威尼斯手机娱乐官网,}

}else{

return @"服务器再次回到错误";

}

}

#import "WXApiObject.h"

libz.dylib,

那一个情势放在WXApiRequestHandler这几个类里面,那正是三个管理进度的类。

遵守WXApiDelegate

libsqlite3.0.dylib,

- onResp:(BaseResp *)resp {

if([resp isKindOfClass:[PayResp class]]){

//支付再次回到结果,实际支付结果需求去Wechat服务器端查询

NSString *strMsg,*strTitle = [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;

}

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

[alert show];

}

}

在这里个主意里登记

libc .dylib,

以此艺术放在WXApiManager类里面。

- application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

CoreTelephoy.framework (坑一: 这么些库是不可缺少的,不过Wechat官方文书档案中并未有提起要导入卡塔尔(قطر‎

在咱们必要调用Wechat支付的时候,调用方法:

[WXApi registerApp:WXAppId withDescription:@"yishuPayDes"];

(4卡塔尔 该品种中的Bundle Identifier 应该填向微信注册的Bundle Identifier

- bizPay {

NSString *res = [WXApiRequestHandler jumpToBizPay];

if( ![@"" isEqual:res] ){

UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"支付战败" message:res delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

[alter show];

}

}

}

(5卡塔尔(قطر‎ 注册Wechat (回调的时候利用,告诉Wechat,从Wechat再次来到到哪个应用程式卡塔尔

那正是Wechat支付的方方面面历程,当然还应该有别忘了在appdelegate里面去调用支付结果的回到方法,那正是二个开辟的全部进度。支付宝支出也是其一进度,只是说她们分别的加密等小进程区别而已。

跳转管理

Target --> info --> URL Types --> 按钮 -->

突发性你会好奇的觉察你跳转到Wechat支付的分界面之后八个分明按键,然后其它的怎么着都不曾。笔者个人感到大概有几点原因:

- application:(UIApplication *)application

填写identifier 和 U昂CoraL Schemes. 前叁个是标记符,经常填@"weixin".后四个是注册的WechatappId.

1.你的app里面是否合两为一了一部分第三方分享之类的,里面含有了享受到Wechat。假使有,在你appdelegate里面,把导入集成的代码放在微信注册代码的近来实行,确认保障程序后实践Wechat支付。

openURL:url

比如"wx19a984b788a8a0b1".(注释: 假的appid)

2.看一下友好的scheme有未有设置对,检查一下本人的Wechat相关配置。

sourceApplication:(NSString *)sourceApplication

威尼斯手机娱乐官网 1

3.莫名不精通的谬误。删除掉app再度运营就好了。

annotation:annotation

(6卡塔尔(قطر‎ 增加Wechat白名单

大家需假若点击按键跳转Wechat公众平台,并复制贰个字符串到剪切板。查了深入,怎么跳转到Wechat。但让动用件跳转作者明白怎么写,不过用的我们Wechat的scheme怎么都跳不过去。查了文书档案也是不曾这一块的知识点,API。前天赶巧在有的时候间见到了跳转Wechat间的相继scheme,才知道原本跳转到Wechat用的是Wechat定好的scheme。

{

info.plist --> 右击 --> open as  --> source Code --> 增多白名单

一经您对上面这一块代码有问号,请百度:iOS应用件跳转,相信你会找到答案。

NSLog(@"跳转到U迈凯伦600LTL schema中安排的地点-->%@",url卡塔尔(قطر‎;//跳转到UEscortL schema中配置的地址

自身是在CFBundleVersion这一行上边增多的. 注意保持正确的键值对.别插错了

NSString *urlStr = [NSString stringWithFormat:@"weixin://dl/officialaccounts"];

//复制字符串到剪切板

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];

pasteboard.string = @"sun yun fei";

[[UIApplication sharedApplication]openURL:[NSURL URLWithString:urlStr]];

if ([UMSocialSnsService handleOpenURL:url]) {

威尼斯手机娱乐官网 2

那就是跳转的代码,点击直接跳转到Wechat大伙儿平台。当然这里照旧加一句决断相比好,决断一出手提式有线电电话机是还是不是安装了Wechat。

return [UMSocialSnsService handleOpenURL:url];

威尼斯手机娱乐官网 3

那正是自己自身做的微信支赋予跳转,希望对你有着协助。

}else{

(7卡塔尔国借使开荒成功,回调方法不试行,或许回调不成功.请再度肯定(4卡塔尔(5卡塔尔国(6卡塔尔(قطر‎,是或不是填写精确.

demo链接,我们可以看一下(给个星星呗,各位看官),xcode7.2运行条件下写的。

return [WXApi handleOpenURL:url delegate:self];

(8State of Qatar 运营一下,不报错.报错,再度明显(1卡塔尔(قطر‎--(7卡塔尔国步骤.

}

二.代码相关

}

  1. 在AppDelegate.h中

回调方法

(1卡塔尔 导入微信类 #import @"WXApi.h".

- onResp:(BaseResp*)resp

(2卡塔尔国 遵从Wechat代理方法

{

  1. 在APPDelegate.m中

NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];

(1卡塔尔 注册Wechat

NSString *strTitle;

#pragma mark 注册Wechat

if([resp isKindOfClass:[SendMessageToWXResp class]])

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

{

strTitle = [NSString stringWithFormat:@"发送媒体新闻结果"];

//注册 微信

}

/**

if([resp isKindOfClass:[PayResp class]]){

参数1 : 微信Appid

//支付重临结果,实际花费结果须要去Wechat服务器端查询

参数2 : 对项目标陈说音讯(用场目名称卡塔尔

strTitle = [NSString stringWithFormat:@"支付结果"];

*/

switch (resp.errCode) {

[WXApi registerApp:@"微信Appid" withDescription:@"云宴"];

case WXSuccess:{

return YES;

strMsg = @"支付结果:成功!";

}

NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode卡塔尔;

(2State of Qatar 跳转格局,并安装代理

NSNotification *notification = [NSNotification notificationWithName:ORDER_PAY_NOTIFICATION object:@"success"];

#pragma mark 跳转管理//被舍弃的方法. 可是在低版本中会用到.提议写上- (BOOL卡塔尔国application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{    return [WXApi handleOpenURL:url delegate:self];}//被放任的方法. 可是在低版本中会用到.提出写上- (BOOL卡塔尔(قطر‎application:(UIApplication *)application handleOpenURL:(NSURL *)url{    return [WXApi handleOpenURL:url delegate:self];}//新的艺术- (BOOLState of Qatarapplication:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options

[[NSNotificationCenter defaultCenter] postNotification:notification];

{

break;

return [WXApi handleOpenURL:url delegate:self];

}

}

default:{

(3卡塔尔 Wechat回调方法 (注意: 不要写成Req方法了卡塔尔国

strMsg = [NSString stringWithFormat:@"支付结果:退步!retcode = %d, retstr = %@", resp.errCode,resp.errStr];

#pragma mark Wechat回调方法

NSLog(@"错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr);

- (void)onResp:(BaseResp *)resp

NSNotification *notification = [NSNotification notificationWithName:ORDER_PAY_NOTIFICATION object:@"fail"];

{

[[NSNotificationCenter defaultCenter] postNotification:notification];

NSString * strMsg = [NSString stringWithFormat:@"errorCode: %d",resp.errCode];

break;

NSLog(@"strMsg: %@",strMsg);

}

NSString * errStr      = [NSString stringWithFormat:@"errStr: %@",resp.errStr];

}

NSLog(@"errStr: %@",errStr);

}

NSString * strTitle;

// UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

//剖断是Wechat音信的回调 --> 是付出回调回来的依然音讯回调回来的.

// [alert show];

if ([resp isKindOfClass:[SendMessageToWXResp class]])

}

{

.接下来在须求开支的分界面做那几个事:

strTitle = [NSString stringWithFormat:@"发送媒体新闻的结果"];

//监听公告

}

- viewWillAppear:animated{

NSString * wxPayResult;

[self requestDownloadData];

//剖断是或不是是Wechat支付回调 (注意是PayResp 并不是PayReq卡塔尔国

if([WXApi isWXAppInstalled]卡塔尔国 // 判定 顾客是不是安装Wechat

if ([resp isKindOfClass:[PayResp class]])

{

{

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getOrderPayResult:) name:ORDER_PAY_NOTIFICATION object:nil];//监听一个公告

//支付重临的结果, 实际支出结果要求去Wechat服务器端查询

}

strTitle = [NSString stringWithFormat:@"支付结果"];

[super viewWillAppear:animated];

switch (resp.errCode)

}

{

/*ORDER_PAY_NOTIFICATION*/那几个写个宏,全局里写,怎么写?建.h文件!

case WXSuccess:

//移除文告

{

- viewWillDisappear:animated{

strMsg = @"支付结果:";

[[NSNotificationCenter defaultCenter]removeObserver:self];

NSLog(@"支付成功: %d",resp.errCode卡塔尔;

}

wxPayResult = @"success";

开班开拓-----→终于等到你,幸而没废弃!

break;

1. 预备职业,笔者那边封装了下载类AF(本身觉取得比较便于,亲们自个儿写下载就好了,因为大家厂家的网络数据就那么两种State of Qatar首要用以央浼后台服务器已经做好的数目,伏乞下来的参数给微信,用于支付!获取每台器材的IP地址,HUD是吗,大家都用过,不说了(ps:HUD特效,自身定义看看这种效果好!)后台做了何等:

}

  1. 代码

case WXErrCodeUserCancel:

#pragma mark - Wechat支付

{

- WeiXinPay{

strMsg = @"顾客撤消了花费";

if([WXApi isWXAppInstalled]State of Qatar // 决断 顾客是不是安装Wechat

NSLog(@"顾客废除支付: %d",resp.errCode卡塔尔;

{

wxPayResult = @"cancel";

HUD.delegate = self;

break;

HUD.labelText = @"正在为您支付...";

}

[HUD show:YES];

default:

NSString *userID = [[NSUserDefaults standardUserDefaults] objectForKey:@"userID"];

{

NSString *ipAdress = [MyHttpDownload GetIPAddress:YES];

strMsg = [NSString stringWithFormat:@"支付退步! code: %d  errorStr: %@",resp.errCode,resp.errStr];

NSLog(@"ipAdress%@",ipAdress);

NSLog(@":支付退步: code: %d str: %@",resp.errCode,resp.errStr卡塔尔;

NSLog(@"self.order_orderinfoid%@",self.order_orderinfoid);

wxPayResult = @"faile";

NSLog(@"提交地址%@",[NSString stringWithFormat:TESTWXPayUrl,userID,self.order_orderinfoid,_WXPayStyleStr,ipAdress]);

break;

NSDictionary *dict = @{@"uid":userID,@"orderinfo_id":self.order_orderinfoid,@"type":_WXPayStyleStr,@"ip":ipAdress};

}

[MyHttpDownload GetDownload:WXPayUrl param:dict finish:^(NSData *data, NSDictionary *obj, NSError *error) {

}

if ([obj[@"data"] isKindOfClass:[NSDictionary class]]) {

//发出布告从微信回调回来之后,发贰个文告,让诉求支付的页面抽出新闻,况且展现出来,或然拓宽一些自定义的展现可能跳转

NSDictionary *dataDict = obj[@"data"];

NSNotification * notification = [NSNotification notificationWithName:@"WXPay" object:wxPayResult];

NSLog(@"respose信息--》%@",dataDict);

[[NSNotificationCenter defaultCenter] postNotification:notification];

if (obj != nil) {

}

[self WXPayRequest:dataDict[@"appid"] nonceStr:dataDict[@"noncestr"] package:dataDict[@"package"] partnerId:dataDict[@"partnerid"] prepayId:dataDict[@"prepayid"] timeStamp:dataDict[@"timestamp"] sign:dataDict[@"sign"]];

}

}else{

  1. 在ViewController.h (进行支付诉求的类State of Qatar

[HUD hide:YES];

权且并未任何操作

FlyAlertView *alert = [[FlyAlertView alloc] initWithTitle:@"提醒" contentText:@"网络有误" leftButtonTitle:nil rightButtonTitle:@"分明"];

  1. 在ViewController.m中(实行支付的央求的类卡塔尔(قطر‎

[alert show];

(1卡塔尔国 导入Wechat库 #import @"WXApi.h"

}

(2卡塔尔 监听应用程式Delegate.m中发送的照看

}else{

#pragma mark 监听布告

[HUD hide:YES];

- (void)viewWillAppear:(BOOL)animated

NSString *mess = [NSString stringWithFormat:@"%@,退出重试!",obj[@"data"]];

{

[self alert:@"提示" msg:mess];

[super viewWillAppear:YES];

}

//检查评定是不是装了Wechat软件

}];

if ([WXApi isWXAppInstalled])

}else{

{

[HUD hide:YES];

//监听通告

[self alert:@"提醒" msg:@"您未设置Wechat!"];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getOrderPayResult:) name:@"WXPay" object:nil];

}

}

}

}

#pragma mark - 发起支付恳求

#pragma mark - 事件

- WXPayRequest:(NSString *)appId nonceStr:(NSString *)nonceStr package:(NSString *)package partnerId:(NSString *)partnerId prepayId:(NSString *)prepayId timeStamp:(NSString *)timeStamp sign:(NSString *)sign{

- (void)getOrderPayResult:(NSNotification *)notification

//调起Wechat支付

{

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

NSLog(@"userInfo: %@",notification.userInfo);

wxreq.openID = WXAppId;

if ([notification.object isEqualToString:@"success"])

wxreq.partnerId = partnerId;

{

wxreq.prepayId = prepayId;

UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示音信" message:@"支付成功" delegate:self cancelButtonTitle:@"明确" otherButtonTitles:nil, nil];

wxreq.nonceStr = nonceStr;

[alertView show];

wxreq.timeStamp = [timeStamp intValue];

}

wxreq.package = package;

else

wxreq.sign = sign;

{

[WXApi sendReq:wxreq];

[self alert:@"提醒" msg:@"支付战败"];

}

}

#pragma mark - 布告新闻

}

- getOrderPayResult:(NSNotification *)notification{

//顾客端提示消息

if ([notification.object isEqualToString:@"success"])

- (void)alert:(NSString *)title msg:(NSString *)msg

{

{

[HUD hide:YES];

UIAlertView *alter = [[UIAlertView alloc] initWithTitle:title message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

[self alert:@"恭喜" msg:@"您已成功开采啦!"];

[alter show];

payStatusStr = @"YES";

}

本文由澳门威利斯人发布于办公软件,转载请注明出处:微信支付与微信应用间跳转,微信支付全部流程

关键词: 澳门威利斯人 日记本 IOS 跳转 微信支