微信分享配置與實例
微信公衆平臺服務器配置
以下就是wx_check.php 的代碼,將這個文件放於你服務器域名下新建的【wx_check】文件夾內。
<?php
define("TOKEN", "你的token(任意字符串,與服務器上相同)");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";
if(!empty( $keyword ))
{
$msgType = "text";
$contentStr = "Welcome to wechat world!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "Input something...";
}
}else {
echo "";
exit;
}
}
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
?>
發現一個奇怪現象 在文件夾以及文件名前加上 wx_ 前綴之後秒通過驗證,所以我這裏把名字命名爲這個wx_xxx
微信公衆號分享開發
開發過程
下載微信示例
裏面包含有
示例代碼在sample.php上。
打開sample.php 刪除html代碼,最後剩下
上面這一步主要是起到代碼與數據分離
然後把sample改一個很牛逼的名字,父文件夾 【PHP】 也改一個。注意,最好用英文
將其放入服務器域名文件夾內根目錄t
新建測試項目,
share.png 爲分享時展示的圖片,最好爲200*200像素尺寸
testshare.php爲代碼
然後在你的代碼中這樣寫
<?php
require_once "../牛逼名字/牛逼名字.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
TEST share
</body>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
/*
* 注意:
* 1. 所有的JS接口只能在公衆號綁定的域名下調用,公衆號開發者需要先登錄微信公衆平臺進入“公衆號設置”的“功能設置”裏填寫“JS接口安全域名”。
* 2. 如果發現在 Android 不能分享自定義內容,請到官網下載最新的包覆蓋安裝,Android 自定義分享接口需升級至 6.0.2.58 版本及以上。
* 3. 常見問題及完整 JS-SDK 文檔地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
*
* 開發中遇到問題詳見文檔“附錄5-常見錯誤及解決辦法”解決,如仍未能解決可通過以下渠道反饋:
* 郵箱地址:[email protected]
* 郵件主題:【微信JS-SDK反饋】具體問題
* 郵件內容說明:用簡明的語言描述問題所在,並交代清楚遇到該問題的場景,可附上截屏圖片,微信團隊會盡快處理你的反饋。
*/
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: [
// 所有要調用的 API 都要加到這個列表中
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage'
]
});
//當前鏈接地址
var gameUrl = 'http://你的域名/testshare/testshare.html';
var imgUrl = 'http://你的域名/testshare/share.png';
//分享到朋友數據
var sharedata = {
title: '分享測試',
desc: '分享測試,分享測試,分享測試,分享測試,分享測試,分享測試',
link: gameUrl,
imgUrl: imgUrl
};
//分享到朋友圈數據 默認和分享朋友一樣
var timelinedata = {
title: "分享測試",
link: sharedata.link,
imgUrl: sharedata.imgUrl
};
wx.ready(function () {
//分享朋友圈
wx.onMenuShareTimeline(timelinedata);
//分享給朋友
wx.onMenuShareAppMessage(sharedata);
});
</script>
</body>
</html>
將其放入服務器域名內根目錄
瀏覽器訪問這個文件,然後將鏈接發到微信。微信再打開點擊左上角分享到朋友以及分享到朋友圈
錯誤解決
錯誤1 url domain
開發過程中會碰到無法分享的情況,報錯
errmsg config;invalid url domain
這個是因爲沒有配置好js安全域名
解決方法
- 打開微信公衆平臺
- 找到【設置】
- 找到【功能設置】-》【js接口安全域名】-》【設置】
- 保存
錯誤2 40164 invalid ip xxx
errMsg:config :invalid signature
這是提示非法簽名。點擊調試
解決辦法
輸入appid 和 secret。看會不會提示這個問題。如果會則是需要將提示的ip地址加入微信白名單
(奇怪的是,我之前一直用的好好的,然後服務器的環境從 laragon 換成 phpstudy 就出現這個問題)
錯誤3 get方法獲取不到res
官方的 sample.php的 get方法獲取不到res.
解決辦法
如圖,把驗證改爲不驗證(有一個問題待驗證,就是true改爲false之後,是不是白名單就不需要設置了?)
錯誤4 找不到文件
打開鏈接時,仍然提示非法簽名
errMsg:config :invalid signature
解決辦法
查看sample.php 的代碼
看看上圖所示url是否寫對。
上面註釋掉的那個url,在調用時不會自動生成上圖那兩個文件。需要拷貝到項目工程裏。且不能是空的。必須有有效內容。
獲取有效內容有兩種方式
1 用微信的在線調試工具獲取相應的值
2 用下圖所示的url,沒有這兩個文件,也能自動生成。這樣就有一份文件了
一般我都是用上圖那個未註釋的url,方便,智能。