微信支付与微信应用间跳转

前言

年末了,一直在忙项目,很少有时候写一些自己的见解。今天挤出一点时间来写一下刚刚完成的微信的支付和跳转到微信的功能。

如果你还没有做过,可以看一下,作为参考。如果你做过这个了,也可以看一下。总之一句话:有钱的捧个钱场,没钱的捧个人场。😄😄......

微信支付

我这是基于2015年12月在微信官网下载的demo写的支付,如果和你做过的不相同,请查看咱们两个的版本是否一样。

首先,我个人感觉微信现在的iOS版的前端代码比以前的简化了一些,现在的官网的demo最大的一点是不在前端放置任何数据了,都是一个接口请求下来(前一个版本还是在前端有一个微信设置例子,只是建议说后台给数据)。

支付和官方demo里面的read.text说的一样,需要两步:调用请求支付,返回支付结果。

请求支付

+ (NSString *)jumpToBizPay {

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

// V3&V4支付流程实现

// 注意:参数配置请查看服务器端Demo

// 更新时间:2015年11月20日

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

NSString *urlString  = @"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios";

//解析服务端返回json数据

NSError *error;

//加载一个NSURL对象

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自带解析类NSJSONSerialization从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=%ld\npackage=%@\nsign=%@",[dict objectForKey:@"appid"],req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign );

return @"";

}else{

return [dict objectForKey:@"retmsg"];

}

}else{

return @"服务器返回错误,未获取到json对象";

}

}else{

return @"服务器返回错误";

}

}


这一个方法放在WXApiRequestHandler这个类里面,这就是一个处理过程的类。

支付结果返回

- (void)onResp:(BaseResp *)resp {

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

//支付返回结果,实际支付结果需要去微信服务器端查询

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

}

}


这个方法放在WXApiManager类里面。

在我们需要调用微信支付的时候,调用方法:

- (void)bizPay {

NSString *res = [WXApiRequestHandler jumpToBizPay];

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

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

[alter show];

}

}


这就是微信支付的全部过程,当然还有别忘了在appdelegate里面去调用支付结果的返回方法,这就是一个支付的全部过程。支付宝支付也是这个过程,只是说他们各自的加密等小过程不一样而已。

有时候你会奇妙的发现你跳转到微信支付的界面之后一个确定按钮,然后其他的什么都没有。我个人感觉可能有几点原因:

1.你的app里面是不是集成了一些第三方分享之类的,里面包含了分享到微信。如果有,在你appdelegate里面,把导入集成的代码放在微信注册代码的前面执行,确保程序后执行微信支付。

2.看一下自己的scheme有没有设置对,检查一下自己的微信相关配置。

3.莫名不知道的错误。删除掉app再次运行就好了。😄😄

应用间跳转到微信

我们需求是点击按钮跳转微信公众平台,并复制一个字符串到剪切板。查了好久,怎么跳转到微信。但让应用件跳转我知道怎么写,但是用的我们微信的scheme怎么都跳不过去。查了文档也是没有这一块的知识点,API。今天正好在偶然间看到了跳转微信间的各个scheme,才知道原来跳转到微信用的是微信定好的scheme。

如果你对下面这一块代码有疑问,请百度:iOS应用件跳转,相信你会找到答案。

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

//复制字符串到剪切板

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];

pasteboard.string = @"sun yun fei";

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

这就是跳转的代码,点击直接跳转到微信公众平台。当然这里还是加一句判断比较好,判断一下手机是否安装了微信。

后记

这就是我自己做的微信支付与跳转,希望对你有所帮助。

demo链接,大家可以看一下(给个星星呗,各位看官),xcode7.2运行环境下写的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • iOS支付 iOS支付分为两类,第三方支付和应用内支付(内购)。 第三方支付包括:支付宝支付、微信支付、银联支付、...
    请输入账号名阅读 6,173评论 3 22
  • 与微信官方签署在线协议 导入微信支付需要的SDK相关文件 配置App跳转的白名单 添加URL Schemes 配置...
    阁子菌阅读 412评论 0 7
  • 前言:下面介绍微信支付的开发流程的细节,图文并茂,你可以按照我的随笔流程过一遍代码。包你也学会了微信支付。而且支付...
    SmileFans阅读 1,622评论 7 18
  • 3D变换,3个属性 transform-style: prevserve-3d ;建立3D空间,必须是父元素,运动...
    我拥抱着我的未来阅读 589评论 0 0
  • 《一个人醉》 美丽星空下 我独自一个醉 一个人走 只听到旷野中 风和树叶的交谈 我多想告诉他我的寂寞 只怕他把那当...
    晚熟的柿子阅读 183评论 0 0