關於此開發包
- 此composer包主要是集成關於微信的一些常用開發如:微信公眾號二次開發,微信支付,微信手機web的分享等。由於包含眾多功能現只上傳了微信手機web的分享。后期會持續跟進和更新。
- 您在用此包時已默認您已會並成功配置了相關公眾號信息且會使用composer
- 安裝命令composer require doing/wechat 版本號
- 此包只能集成於ThinkPHP5里面:原因是使用了它的緩存機制和異常處理機制,如果想使用於其他框架也很簡單,只需要把緩存機制和異常機制做一個更換處理即可(主要是編程思想)
微信手機web分享(發送給朋友,朋友圈等)
配置公眾號
- 如果只做jssdk相關需求就只需要appid和appsecret,至於怎么去公眾號獲取可以百度很多。
- 配置安全域名
服務器端
- 任務是獲取分享時需要的appid和簽名等參數
- 大概流程:通過appid和appsecret->獲取AccessToken->獲取jsapi的ticket->再簽名返回
- 開發前請在doing/wechat/config/WechatConfig.php 配置appid和appsecret
寫在接口之前
- 把doing/wechat/functions.php里面的函數getRandChar()和postCurl()復制粘貼到application/common.php里。復制完成后functions.php就完成了它的使命,您可以選擇刪除此文件
寫一個接口獲取參數(以json返回)
public function info()
{
//客戶端傳遞過來的參數fullurl一定是要通過js的encodeURIComponent轉義了的
$fullurl = urldecode(input('fullurl'));
#獲取權限信息(直接調用包內方法即可):
//類的頂上一定保證use wechat\auth\WxAuth;
try
{
return json(WxAuth::instance()->getInfo($fullurl));
}
catch (\Exception $e)
{
$exp['msg'] = $e->getMessage();
$exp['code'] = $e->getCode();
#TP5的返回方式 異常都在客戶端的error回掉函數內處理
return json($exp, $e->getCode());
}//-try
}//pf
返回成功的數據格式如下(滿足客戶端調用微信jssdk時需要的數據結構)
{
appId: 'you appId',// 公眾號的唯一標識
timestamp:'12345678',// 生成簽名的時間戳
nonceStr: '12345678',// 生成簽名的隨機串
signature: '12345678'// 簽名
}
返回異常的數據格式如下(http狀態碼600在header體現)
{
"msg": "微信錯誤碼【40164】invalid ip 118.112.58.58, not in whitelist hint: [wgirhA04751512]",
"code": 600
}
客戶端(手機web)
1、要確保加載了jquery和微信jsdk
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
2、定義相應的url
//BASE_URL_WX是你的服務器地址比如http://www.test.com防止以后更改:這個域名要和微信公眾號配置的JS安全域名保持一致
//shareUrl是你要分享的頁面的url如果后面有參數就?id=xx拼接
var shareUrl = BASE_URL_WX + "/listen/web/share/app";
//fullurl是去簽名的url也就是嗲都用接口時客戶端要的
//fullurl一定要這么寫,且很多時候shareUrl和fullurl是相等的但有些特殊情況不相等要報錯:這個問題調試了一天得出的結論
var fullurl = encodeURIComponent(location.href.split('#')[0]);
通過ajax請求獲取簽名等參數同時寫微信的邏輯
說明:下面的imgUrl一定是直接可以訪問的且在服務器上的全路徑
$.ajax({
type: 'GET',
url: SIGN_URL,
data:{fullurl:fullurl},
dataType: 'json',
success: function (res) {
wx.config({
debug: false, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。
appId: res.appId, // 必填,公眾號的唯一標識
timestamp: res.timestamp, // 必填,生成簽名的時間戳
nonceStr: res.noncestr, // 必填,生成簽名的隨機串
signature: res.signature,// 必填,簽名
jsApiList: [
'onMenuShareAppMessage',//分享給好友
'onMenuShareTimeline'//朋友圈
] // 必填,需要使用的JS接口列表
});
wx.ready(function () {
//發送給朋友
wx.onMenuShareAppMessage({
title: title, // 分享標題
desc: desc, // 分享描述
link: shareUrl, // 分享鏈接
imgUrl:shareImg, // 分享圖標
type: 'link', // 分享類型,music、video或link,不填默認為link
dataUrl: '', // 如果type是music或video,則要提供數據鏈接,默認為空
success: function () {
},
cancel: function () {}
}),
//分享到朋友圈
wx.onMenuShareTimeline({
title: title, // 分享標題
link: shareUrl, // 分享鏈接
imgUrl:shareImg, // 分享圖標
})
});
},
error: function (res) {
alert("微信服務器異常");
}
});
