不接入微信sdk,在APP中實現微信分享,支付

前段時間在很多地方接入了微信的sdk,發現過程比較繁瑣,此外因爲導入的sdk比較大會影響最終APP打包的體積,所以就有了不接入sdk也實現相同的功能的想法。
要實現這個目標我個人認爲最困難的地方是不知道我們自己的app在調用微信時會傳遞怎樣的參數給微信。如果知道了參數那麼實現這個目的就比較簡單了後來經過了一番波折最終獲取到了微信分享好友和朋友圈以及微信支付的通信參數。
 進入正題吧,首先要在一個APP中調起另外一個APP我們都知道要實現這個方法:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];

這裏的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};

dic1的key: scene的值決定你是分享到好友還是分享到朋友圈,這個根據微信官方文檔可以確定當值爲0和1是將分別分享到朋友圈和好友。
字典diction是我們的應用將要傳遞給微信的數據,在這要首先轉換個數據類型進行數據編碼方便進行下一步的操作

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/?"]];

最後爲了實現分享後的回調你要添加微信的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/?"]];

下面說說怎麼進行微信支付,同樣的要想進行支付也要調起微信的那麼:

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

這個方法最終也是要調用的,可能你也看出來了,調用微信支付的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直接實現相關的功能。關鍵點就在於一或取要傳遞信息的內容格式,二是要獲取數據傳輸方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章