

。
查了網(wǎng)上的資料和微信開發(fā)文檔,是微信為安全原因,防止類似釣魚網(wǎng)址等非法鏈接做的安全措施。為了實現(xiàn)上述功能,我們需要在網(wǎng)站中加入動態(tài)代碼,調(diào)用微信sdk接口,獲得認證。
微信說明文檔鏈接
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
- 根據(jù)開發(fā)說明,我們首先需要先登錄微信公眾平臺進入“公眾號設(shè)置”的“功能設(shè)置”里填寫“JS接口安全域名”。(備注:登錄后可在“開發(fā)者中心”查看對應的接口權(quán)限。)
首先登陸微信開發(fā)者平臺,在 開發(fā)-接口權(quán)限 中打開相應接口,


-
進入 設(shè)置-公眾號設(shè)置,打開 功能設(shè)置 標簽,在 JS接口安全域名內(nèi) 添加需要調(diào)用微信js接口網(wǎng)頁的域名。
屏幕快照 2017-11-26 上午7.20.12.png
設(shè)置JS接口安全域名時,微信會要求開發(fā)者下載一個文件,并上傳到填寫的域名下。完成操作后,安全域名就添加成功了。
簡單瀏覽了一下開發(fā)文檔,直接下載頁面最后的sample測試代碼。在php文件夾中四個文件
access_token.php
jsapi_ticket.php
jssdk.php
sample.php
其中,sample.php是demo頁面。
jssdk.php中整合了獲得config中需要的timestamp,nonceStr,signature及中間數(shù)據(jù)access_token,jsapi_ticket等函數(shù)。
access_token.php及jaspi_ticket.php是空的,用來全局存在這兩個變量。微信規(guī)定access_token的有效期7200秒,而且每天調(diào)用不能超過2000次,所有需要全局存儲,在有效周期內(nèi)從本地獲得。打開 php 文件中sample.php
<?php
require_once "jssdk.php";
$jssdk = new JSSDK("yourAppID", "yourAppSecret");
$signPackage = $jssdk->GetSignPackage();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
wx.config({
debug: true,
appId: '<?php echo $signPackage["appId"];?>',
timestamp: <?php echo $signPackage["timestamp"];?>,
nonceStr: '<?php echo $signPackage["nonceStr"];?>',
signature: '<?php echo $signPackage["signature"];?>',
jsApiList: [
// 所有要調(diào)用的 API 都要加到這個列表中
]
});
wx.ready(function () {
// 在這里調(diào)用 API
});
</script>
</html>
在 $jssdk = new JSSDK("yourAppID", "yourAppSecret"); 處需要添加AppID及AppSecret。

在需要調(diào)用JS接口的頁面引入如下JS文件,(http://res.wx.qq.com/open/js/jweixin-1.0.0.js)
如果你的頁面啟用了https,需要引入(https://res.wx.qq.com/open/js/jweixin-1.0.0.js) ,否則將無法在iOS9.0以上系統(tǒng)中成功使用JSSDK。
另外,我們看到下面有一個標簽<IP白名單>,在這里需要添加我們訪問來源的IP地址,只有白名單里面的ip地址訪問,才能獲得access_token,并成功調(diào)用微信開發(fā)接口。
這個ip地址,是服務(wù)端所在服務(wù)器的地址,可以通過服務(wù)器提供商出獲得。經(jīng)過測試,如有需要本地pc端測試,好像還需要將本地的ip加入。如果不確定ip地址的話,可以先不填。調(diào)試過程中,他會返回某ip地址未在白名單中的提示,直接把這個地址加入,就可以了。
-
上傳測試文件到服務(wù)器。因為我們在config中設(shè)置了debug為true,所以每次調(diào)用都可以看到反饋信息。
登陸頁面,跳出對話框
WechatIMG5.jpg
說明簽名沒有被正確得到。
調(diào)試jsjdk.php中,我們發(fā)現(xiàn)獲得access_token為空。查看httpGet函數(shù)返回信息,
private function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
// 為保證第三方服務(wù)器與微信服務(wù)器之間數(shù)據(jù)傳輸?shù)陌踩?,所有微信接口采用https方式調(diào)用,必須使用下面2行代碼打開ssl安全校驗。
// 如果在部署過程中代碼在此處驗證失敗,請到 http://curl.haxx.se/ca/cacert.pem 下載新的證書判別文件。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
echo $res;//顯示數(shù)據(jù)
return $res;
}
首先下載新的ssl安全校驗證書cacert.pem,保持到根目錄下。

好的,現(xiàn)在把這個ip地址加入到微信公眾平臺的ip白名單中。
再次調(diào)用

顯示成功。

截止到現(xiàn)在,這個過程就基本調(diào)試通過了。
- 在sample.php中加入我們要分享的信息
wx.ready(function(){
var shareData = {
title: '中國船舶工業(yè)集團公司',
desc: '中國船舶工業(yè)集團公司',
link: 'http://www.flashtek.com.cn/cssc/index.php',
imgUrl: 'http://www.flashtek.com.cn/cssc/img/logo.png'
};
wx.onMenuShareAppMessage(shareData);
wx.onMenuShareTimeline(shareData);
});


