手機網站的網頁進行微信轉發時遇到的問題

    之前公司往外推送微信信息的時候,都是在後臺添加的文本,你們轉發起來沒有任何問題。最近手機網站上上了幾個新活動,用微信轉發的時候,問題來了,左下角的小圖片沒有,應該是文字簡介的地方是一條url,實在不雅觀。用一些笨笨的方法也可以彌補一下這個問題,好比,把<title>標籤中的內容豐滿一下,在腳本的開頭能夠隱藏一張圖片,確實標題和圖片可以出來,但這終究不是正道,今天就研究了一下微信的這個東東,在網上搜索了一下,還真是找到一個很是棒的類庫,用起來效果也很不錯。php

<?php
class WeixinAction extends Action {
    /**
     * php curl 請求連接
     * 當$post_data爲空時使用GET方式發送
     * @param unknown $url
     * @param string $post_data
     * @return mixed
     */
    function curlSend($url,$post_data=""){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        if($post_data != ""){
            curl_setopt($ch,CURLOPT_POST,1);
            curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
        }
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }
    /**
     * 調用接口獲取 $ACCESS_TOKEN
     * 微信緩存 7200 秒,這裏使用thinkphp的緩存方法
     * @param unknown $APP_ID
     * @param unknown $APP_SECRET
     * @return Ambigous <mixed, Thinkmixed, object>
     */
    function get_accesstoken($APP_ID,$APP_SECRET){
        $ACCESS_TOKEN = S($APP_ID);
        if($ACCESS_TOKEN == false){
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$APP_ID."&secret=".$APP_SECRET;
            $json = $this->curlSend($url);
            $data=json_decode($json,true);
            S($APP_ID,$data[access_token],7000);
            $ACCESS_TOKEN = S($APP_ID);
        }
        return $ACCESS_TOKEN;
    }
    /**
     * 微信網頁JSSDK?調用接口獲取 $jsapi_ticket
     * 微信緩存 7200 秒,這裏使用thinkphp的緩存方法
     * @param unknown $ACCESS_TOKEN
     * @return Ambigous <mixed, Thinkmixed, object>
     */
    function get_jsapi_ticket($ACCESS_TOKEN){
        $jsapi_ticket = S($ACCESS_TOKEN);
        if($jsapi_ticket == false){
            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$ACCESS_TOKEN."&type=jsapi";
            $json = $this->curlSend($url);
            $data = json_decode($json,true);
            S($ACCESS_TOKEN,$data[ticket],7000);
            $jsapi_ticket = S($ACCESS_TOKEN);
        }
        return $jsapi_ticket;
    }
    /**
     * 微信網頁JSSDK 獲取簽名字符串
     * 全部參數名均爲小寫字符
     * @param unknown $nonceStr 隨機字符串
     * @param unknown $timestamp 時間戳
     * @param unknown $jsapi_ticket
     * @param unknown $url 調用JS接口頁面的完整URL,不包含#及其後面部分
     */
    function get_js_sdk($APP_ID,$APP_SECRET){
//        echo $APP_ID.'/'.$APP_SECRET;
        $protocol = (!empty($_SERVER[HTTPS]) && $_SERVER[HTTPS] !== off || $_SERVER[SERVER_PORT] == 443) ? "https://" : "http://";
        $url = $protocol.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI];
        $argu = array();
        $argu[appId] = $APP_ID;
        $argu[url] = $url;
        $argu[nonceStr] = $this->createNonceStr();
        $argu[timestamp] = time();
        $ACCESS_TOKEN = $this->get_accesstoken($APP_ID, $APP_SECRET);
        $argu[jsapi_ticket] = $this->get_jsapi_ticket($ACCESS_TOKEN);
        $string = "jsapi_ticket=".$argu[jsapi_ticket]."&noncestr=".$argu[nonceStr]."&timestamp=".$argu[timestamp]."&url=".$argu[url];
        $argu[signature] = sha1(trim($string));
        return $argu;
    }
    /**
     * 獲取隨機字符串
     * @param number $length
     * @return string
     */
    function createNonceStr($length = 16) {
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        $str = "";
        for ($i = 0; $i < $length; $i++) {
            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        }
        return $str;
    }
}
?>

    使用的時候用R函數帶着兩個參數,請求get_jsapi_ticket()方法,兩個參數分別是$APP_ID,$APP_SECRET,這兩個參數在本身的微信公共平臺上能夠看到。返回值能夠將config中的選項填充起來。thinkphp

 wx.config({
                debug: false, // 開啓調試模式
                appId: '{$res.appId}', // 必填,公衆號的惟一標識
                timestamp: {$res.timestamp}, // 必填,生成簽名的時間戳
                nonceStr: '{$res.nonceStr}', // 必填,生成簽名的隨機串的
                signature: '{$res.signature}',// 必填,簽名,見附錄1
                jsApiList: {$res.jsApiList} // 必填,須要使用的JS接口列表,全部JS接口列表見附錄2
        });

    jsApiList能夠根據本身的須要添加。而後就簡單多了,打開微信開發文檔吧。json

wx.ready(function(){
            wx.onMenuShareAppMessage({
                title: '{$res.title}',
                desc: '{$res.desc}',
                link: '{$res.link}',
                imgUrl: '{$res.imgUrl}',
                success: function (res) {
                    alert('感謝您的分享');
                }
            });
            wx.onMenuShareTimeline({
                title: '{$res.title}', // 分享標題
                link: '{$res.link}', // 分享連接
                imgUrl: '{$res.imgUrl}', // 分享圖標
                success: function () {
                    // 用戶確認分享後執行的回調函數
                    alert('感謝您的分享');
                },
                cancel: function () {
                    // 用戶取消分享後執行的回調函數
                }
            });
        });

    這樣不管分享給朋友仍是分享到朋友圈,就漂亮多了。api

相關文章
相關標籤/搜索