不接入微信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&timestamp=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&timestamp=1458890994&sign=9326D72E6EE0891983B81B1F83D3B5C4"]];

我这个商户号有时会被微信封掉没办法进行支付,你可以把相关信息替换成你自己的。 
最后,无论是支付宝支付,QQ登录,微博分享……这些功能都可以通过上面的思路不接入官方的SDK直接实现相关的功能。关键点就在于一或取要传递信息的内容格式,二是要获取数据传输方式。

原文地址:https://www.cnblogs.com/duwamish/p/6743987.html