不接入微信sdk,在APP中实现微信分享,支付
前段时间在很多地方接入了微信的sdk,发现过程比较繁琐,此外因为导入的sdk比较大会影响最终APP打包的体积,所以就有了不接入sdk也实现相同的功能的想法。
要实现这个目标我个人认为最困难的地方是不知道我们自己的app在调用微信时会传递怎样的参数给微信。如果知道了参数那么实现这个目的就比较简单了后来经过了一番波折最终获取到了微信分享好友和朋友圈以及微信支付的通信参数。
进入正题吧,首先要在一个APP中调起另外一个APP我们都知道要实现这个方法:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
- 1
- 1
这里的URL将会决定到底会调起哪个APP不卖关子了当:
url = @”weixin://app/wx63e70d351f028e3c/sendreq/?”;
时就会吊起微信分享,wx63e70d351f028e3c这个值是你在微信开发者平台注册APP时微信给你的URL Schemes。但是仅仅有这个是不够的,要知道分享的时候必然会伴随这数据的传递,这些数据可以决定你是分享文本还是图片或者视频等等。那么怎么获得这些数据的形式现在先放一放,这里主要说的是怎么把这些数据从我们自己的 APP传递给微信。iOS有个粘贴板可以实现应用简单的数据通信。
NSDictionary *dic1 = @{
@"command":@"1020",
@"result" :@"1",
@"returnFromApp":@"0",
@"scene":@"0",
@"sdkver":@"1.5",
@"title":@"不接微信的sdk成功进行微信分享了"
};
NSDictionary *diction = @{@"wx63e70d351f028e3c":dic1};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
dic1的key: scene的值决定你是分享到好友还是分享到朋友圈,这个根据微信官方文档可以确定当值为0和1是将分别分享到朋友圈和好友。
字典diction是我们的应用将要传递给微信的数据,在这要首先转换个数据类型进行数据编码方便进行下一步的操作
NSData *output1=[NSPropertyListSerialization dataWithPropertyList:diction format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil];
- 1
- 1
这个方法是粘贴板的数据编码方法,然后就可以将数据存入粘贴板了:
[[UIPasteboard generalPasteboard] setData:output1 forPasteboardType:@"content"];
- 1
- 2
- 1
- 2
最后我们要实现这个方法就可以进行微信分享了:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://app/wx63e70d351f028e3c/sendreq/?"]];
- 1
- 1
最后为了实现分享后的回调你要添加微信的URL Schemes。
看完整的代码,这个是最简单的分享文本了:
NSDictionary *dic1 = @{
@"command":@"1020",
@"result" :@"1",
@"returnFromApp":@"0",
@"scene":@"0",
@"sdkver":@"1.5",
@"title":@"不接微信的sdk成功进行微信分享了"
};
NSDictionary *diction = @{@"wx63e70d351f028e3c":dic1};
NSData *output1=[NSPropertyListSerialization dataWithPropertyList:diction format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil];
[[UIPasteboard generalPasteboard] setData:output1 forPasteboardType:@"content"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://app/wx63e70d351f028e3c/sendreq/?"]];
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
下面说说怎么进行微信支付,同样的要想进行支付也要调起微信的那么:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
- 1
- 1
这个方法最终也是要调用的,可能你也看出来了,调用微信支付的URL值是关键,不罗嗦了进行微信支付要比进行微信分享简单多了,微信支付的信息可以直接写在url后面不需要通过粘贴板的这是微信支付的URL值:
NSString *url = @"weixin://app/wx63e70d351f028e3c/pay/?noncestr=1q8XRJDjqO&partnerid=1234499502&package=Sign%3DWXPay&prepayid=wx20160325152953b84e5404140168616407×tamp=1458890994&sign=9326D72E6EE0891983B81B1F83D3B5C4";
看了这url你或许就明白了,pay代表了支付,其他的诸如noncestr,partnerid,prepayid……这些值都代表了一些支付信息比如商户号,订单号,签名……这些信息在这就不详细说明了,你可以在微信的官方文档中获得这些值的解释。
好了看微信支付的完整代码,很简单就一行:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://app/wx63e70d351f028e3c/pay/?noncestr=1q8XRJDjqO&partnerid=1234499502&package=Sign%3DWXPay&prepayid=wx20160325152953b84e5404140168616407×tamp=1458890994&sign=9326D72E6EE0891983B81B1F83D3B5C4"]];
我这个商户号有时会被微信封掉没办法进行支付,你可以把相关信息替换成你自己的。
最后,无论是支付宝支付,QQ登录,微博分享……这些功能都可以通过上面的思路不接入官方的SDK直接实现相关的功能。关键点就在于一或取要传递信息的内容格式,二是要获取数据传输方式。
不接入微信sdk,在APP中实现微信分享,支付的更多相关文章
- react-native 的微信SDK辅助包,支持微信登录、微信分享、微信支付
微信SDK集成示例,现已完成微信授权登录,之后将陆续包装分享等其他功能. ReactNative高级交流群 127482131 或访问 http://blog.1ygowu.com ReactNat ...
- app中使用微信分享注意事项
1. 在微信公众平台开通一个微信公众号,https://mp.weixin.qq.com 2. 将自己制作好的已签名的app安装到手机上 3. 下载微信开放平台获取应用签名的apk--- gen ...
- android APP 中微信分享功能实现 的总结
//花了很长时间最终完成了微信分享功能,中间走了很多弯路,在此做一下小结,希望对在应用中使用到微信分享的朋友有所帮助. 主要问题就是下面两个: 1.为什么运行了项目之后,微信分享只是闪了一下就没有了? ...
- 利用微信支付的订单查询接口可以在APP 中提高支付的可靠性
最近公司有一个应用,用户可以在微信公众号上面下单,也可以在APP 中下单. 当用户在公共号上面下单时,微信支付成功可以返回微信支付单号,但是在APP 中用户微信支付时,个别时候会出现用户已经付款成功, ...
- iOS-不用微信SDK唤起微信支付
作者:TianBai 原文链接:http://www.jianshu.com/p/8930b4496023 要想知道微信SDK是如何调起微信客户端,那么咱们先看看微信SDK到底做了什么 前期准备 接入 ...
- 【Win10 UWP】微信SDK基本使用方法和基本原理
上回讲到,作为一个长期散播温暖,散播希望的小清新无公害WP开发者,继QQ SDK之后,又把UWP微信SDK这茬了结了,仅供学习交流. 1.安装微信SDK for UWP 微信官方此前明确说明短时间内暂 ...
- Xamarin Android绑定微信SDK
现在几乎所有的APP都集成了向微博,微信等社交平台分享的功能.这些社交平台官方也提供了SDK让开发者使用,对于Android和IOS平台而言,只需要下载官方的SDK,按照官方说明文档进行集成就可以轻松 ...
- iOS版微信开发小结(微信支付,APP跳转微信公众号)
最近公司心血来潮,一心要搞微信.废话不多说,直接上干货. 开发前准备: 1.在微信开发者平台获取开发者认证:(一年300元人民币) PS:具体流程按照微信流程指示操作即可,在这就不废话了. 2.下载微 ...
- 微信网页版APP - 网页微信客户端电脑版体验
微信网页版很早就出来了,解决了很多人上班不能玩手机的问题.微信电脑版-网页微信客户端,直接安装在桌面的微信网页版,免去了开浏览器的麻烦.双击就启动了,和其他的应用程序一样:运行过程中可以隐藏在桌面右下 ...
随机推荐
- python while for else
python的循环挺有意思 while和for体中可以带上else项 while中的else表示循环条件不成立时,去执行一次,也就是退出循环前去做一次 for中的else表示固定循环正常完成后,去执行 ...
- jmeter SMTP Sampler取样器发送测试结果邮件
原理: 先用结果类监听器(用表格察看结果.聚合报告)将测试结果以csv文件保存到本地. 然后再用SMTP Sampler取样器把本地的测试结果文件发送到指定邮箱 具体步骤如下: 1.下载javamai ...
- 从零开始一起学习SLAM | 三维空间刚体的旋转
刚体,顾名思义,是指本身不会在运动过程中产生形变的物体,如相机的运动就是刚体运动,运动过程中同一个向量的长度和夹角都不会发生变化.刚体变换也称为欧式变换. 视觉SLAM中使用的相机就是典型的刚体,相机 ...
- webpack使用六
插件(Plugins) 插件(Plugins)是用来拓展Webpack功能的,它们会在整个构建过程中生效,执行相关的任务. Loaders和Plugins常常被弄混,但是他们其实是完全不同的东西,可以 ...
- EL的隐含对象 (二)【访问作用域范围的隐含对象】
在EL中提供了4个用于访问作用域范围的隐含对象,即pageScope.requestScope.sessionScope和applicationScope.应用这4个隐含对象指定所要查找的标识符的作用 ...
- memory consistency
目前的计算机系统中,都是shared memory结构,提供统一的控制接口给软件, shared memory结构中,为了memory correctness,可以将问题分为:memory consi ...
- MyEclipse10中文乱码
1 进入window->preferences general->content types,可以设置Text对应的default encoding值为UTF-8或为空,然后点击updat ...
- JavaScript(六):错误处理机制
1.Error()构造函数 javascript解析或执行语句时,一旦发生错误,js引擎会将其抛出! JavaScript原生提供了Error()构造函数,所有抛出的错误都是这个构造函数的实例(即对象 ...
- python: numpy--函数 shape用法
http://blog.csdn.net/u010758410/article/details/71554224 shape函数是numpy.core.fromnumeric中的函数,它的功能是查看矩 ...
- hdu4870 高斯消元
题意 一个人打比赛 ,rating 有p的概率 为加50分 有1-p的概率为 x-100分 最大值为 1000 最小值为0 有两个号 每次拿较小的号来提交 , 计算最后到达 1000分得期望场数是多少 ...