微信開發

航空母艦發表於2015-02-28

微信開發公眾平臺開發介面 http://mp.weixin.qq.com/wiki/home/index.html

線上除錯 http://www.fangbei.org/

防止微信的css,js快取 http://hudeyong926.iteye.com/blog/1259256

 

微信伺服器配置

 

wx.sample.php是官網下載的,檔案裡面的token和開放平臺的一樣,配置成功後,換成

$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid(); //呼叫類的valid()方法執行介面驗證。
$wechatObj->responseMsg();//處理並回複使用者傳送過來的訊息,也是用的最多的一個函式,幾乎所有的功能都在這裡實現

QQ客服:註冊的廣點通,填了公司資質,要推廣的連結地址能解決閃跳

<a href="http://wpa.qq.com/msgrd?v=3&uin=123456789&site=qq&menu=yes">聯絡客服</a>
微信客服 :http://www.kuaishang.cn/open/
微信打電話程式碼發簡訊程式碼
<a class="c" href="tel:124567xxxx">點選通話</a>
#只需要替換tel後面的數字即可打電話把tel 換成 sms 就是發簡訊 

判斷是否在微信瀏覽器開啟

/**
 * 判斷是否為手持設別的函式
 *
 * @static
 * @return   boolean
 */
public static function isMobile()
{
    $devices = array(
        "operaMobi" => "Opera Mobi",
        "android" => "android",
        "blackberry" => "blackberry",
        "iphone" => "(iphone|ipod)",
        "opera" => "opera mini",
        "palm" => "(avantgo|blazer|elaine|hiptop|palm|plucker|xiino)",
        "windows" => "windows ce; (iemobile|ppc|smartphone)",
        "generic" => "(kindle|mobile|mmp|midp|o2|pda|pocket|psp|symbian|smartphone|treo|up.browser|up.link|vodafone|wap)"
    );

    if (isset($_SERVER['HTTP_X_WAP_PROFILE']) || isset($_SERVER['HTTP_PROFILE']))
    {
        return true;
    } elseif (isset($_SERVER['HTTP_ACCEPT']) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/vnd.wap.wml') > 0 || strpos($_SERVER['HTTP_ACCEPT'], 'application/vnd.wap.xhtml+xml') > 0))
    {
        return true;
    } else {
        if (isset($_SERVER['HTTP_USER_AGENT']))
        {
            foreach ($devices as $device => $regexp)
            {
                if (preg_match("/" . $regexp . "/i", $_SERVER['HTTP_USER_AGENT']))
                {
                    return true;
                }
            }
        }
    }
    return FALSE;
}

public static function isWechat(){
    $userAgent = $_SERVER['HTTP_USER_AGENT'];

    if (strpos($userAgent, 'MicroMessenger') !== false){
        return true;
    }

    return false;
}
 微信公眾號支付 支付授權目錄配置成目錄的方式http://www.test.com/index.php/wxpay/
//呼叫微信JS api 支付
function jsApiCall()
{
    WeixinJSBridge.invoke(
        'getBrandWCPayRequest',
        <?php echo $jsApiParameters; ?>,
        function(res){
            alert("code:"+res.err_code+"msg:"+res.err_desc+"enmsg:"+res.err_msg);
            if(res.err_msg == "get_brand_wcpay_request:ok" ) { //支付成功會跳
                location.href = '<?php echo $this->createUrl("member/index"); ?>';
            }else{
                //使用者遇到錯誤或者主動放棄
//if (res.err_msg == "get_brand_wcpay_request:cancel") {//您取消了支付
//if (res.err_msg == "get_brand_wcpay_request:fail") {//支付失敗
                location.href = '<?php echo $this->createUrl("order/view",array("id"=>$order_id)); ?>';
            }
        }
    );
}
微信支付回撥,可以根據統一下單的可選引數進行業務區分
public function NotifyProcess($data, &$msg)
{
    if ($data['result_code'] == "SUCCESS" && $data['return_code'] == "SUCCESS") {
        if ($data['attach'] == "pay") {    //微信支付回撥
            $this->payNotify($data, $msg);
        }
        if ($data['attach'] == "recharge") {//微信充值回撥
            $this->rechargeNotify($data, $msg);
        }
    }
    return parent::NotifyProcess($data, $msg);
}
  微信支付-收貨地址共享 支付授權目錄配置成目錄的方式http://www.test.com/index.php/wxpay/address
//獲取共享地址
function editAddress()
{
    WeixinJSBridge.invoke('editAddress', address_params, function(res){
        if(res.err_msg == 'edit_address:ok'){
            $.post("url",{
                name:res.userName,
                phone:res.telNumber,
                address:address
            },function(data){
                isValid = true;
            });
        }
    });
}

window.onload = function(){
    if (typeof WeixinJSBridge == "undefined"){
        if( document.addEventListener ){
            document.addEventListener('WeixinJSBridgeReady', editAddress, false);
        }else if (document.attachEvent){
            document.attachEvent('WeixinJSBridgeReady', editAddress);
            document.attachEvent('onWeixinJSBridgeReady', editAddress);
        }
    }else{
        editAddress();
    }
};
公眾號設定-》功能設定 設定業務域名後,在微信內訪問該域名下頁面時,不會被重新排版。使用者在該域名上進行輸入時,不出現下圖所示的安全提示。

需要注意的一點是微信5.0以下版本不支援微信支付功能。還有就是在支付url後面加上showwxpaytitle=1字串,會有“微信安全支付”的文字提示
一個微信公眾號解決多個域名授權回撥https://github.com/dannyhu926/GetWeixinCode

如何獲取微信使用者基本資訊,據我所知目前有兩個方式

在本文中,特別要注意的是有兩個不同的Access Token,他們產生的方式不一樣,一種是使用AppID和AppSecret獲取的access_token,一種是OAuth2.0授權中產生的access_token,分別稱為全域性Access Token和授權Access Token。

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

再使用全域性ACCESS_TOKEN獲取OpenID的詳細資訊(這種方式必須先關注公眾號才能正常使用

https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID
2.使用者關注以及回覆訊息,均可以獲得使用者的OpenID。
<xml>
    <ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName>
    <FromUserName><![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]></FromUserName>
    <CreateTime>1372307736</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[subscribe]]></Event>
    <EventKey><![CDATA[]]></EventKey>
</xml>
“FromUserName”標籤中的內容即為該使用者的OpenID,MsgType關注訂閱事件subscribe,取消關注訂閱事件unsubscribe,掃碼事件scan
點選微信的自定義選單連結,獲取openid
{
    "button": [
        {
            "type": "view",
            "name": "授權獲取",
            "url": "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx0738856156f7323c&redirect_uri=http://israel.sinaapp.com/oauth2/&response_type=code&scope=snsapi_base&state=1#wechat_redirect"
        }
    ]
}
微信分享
<!-- 微信分享 -->
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript" src="__PUBLIC__/wechat/share.js"></script>
<script>
    var _wxConfig = <?php echo ($wx_js_config); ?>;
    var  _share = {
        tit: "qqqq來領取。",
        img: "<?php echo WAP_DOMAIN;?>share.png",
        con: "<?php echo ($share_text); ?>",
        link: "<?php echo ($share_url); ?>",
        pyq:{ //分享朋友圈回撥
            success:function(){
                //成功 success
                $.ajax({
                    type: "POST",
                    url: "<?php echo U('ajaxShareCallback');?>",
                    dataType: "json",
                    success: function(data){
                    }
                });
            }
        }
    };
    _share = _share || {};
    $(document).wechatShare(_wxConfig, _share);
</script>
微信官方帶引數二維碼帶多個引數實現
$postData['action_name'] = 'QR_LIMIT_STR_SCENE';
$postData['action_info']['scene'] = ['scene_str' => $adminId . "_" . $type];
訊息模板內容換行
$data['first'] = array('value' => "尊敬的張三,您好。\r\n請您在確認認購資訊無誤後儘快安排打款。");
 批量隱藏功能按鈕介面
wx.hideMenuItems({
    menuList: [] // 要隱藏的選單項,只能隱藏“傳播類”和“保護類”按鈕,所有menu項見附錄3
});
#傳送給朋友: "menuItem:share:appMessage"
#分享到朋友圈: "menuItem:share:timeline"
隱藏所有非基礎按鈕介面
wx.hideAllNonBaseMenuItem();
 個性化選單
CREATE TABLE `weixin_gxhmenu_group` (
  `group_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `wx_gxh_menuid` int(11) NOT NULL COMMENT '個性化選單menuid',
  `tag_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '使用者標籤的id,可通過使用者標籤管理介面獲取',
  `sex` int(1) NOT NULL DEFAULT '0' COMMENT '性別:男(1)女(2),不填則不做匹配',
  `client_type` varchar(30) NOT NULL DEFAULT '' COMMENT '客戶端版本,當前只具體到系統型號:IOS(1), Android(2),Others(3),不填則不做匹配',
  `country` varchar(100) NOT NULL DEFAULT '' COMMENT '國家資訊,是使用者在微信中設定的地區',
  `province` varchar(100) NOT NULL DEFAULT '' COMMENT '省份資訊,是使用者在微信中設定的地區',
  `city` varchar(100) NOT NULL DEFAULT '' COMMENT '城市資訊,是使用者在微信中設定的地區,具體請參考地區資訊表',
  `language` int(10) NOT NULL DEFAULT '0' COMMENT '語言資訊,是使用者在微信中設定的語言,具體請參考語言表: 1、簡體中文 "zh_CN" 2、繁體中文TW "zh_TW"',
  `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序,後生成選單wx排最前',
  PRIMARY KEY (`group_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
客服訊息介面:當使用者和公眾號產生特定動作的互動時(具體動作列表請見下方說明),微信將會把訊息資料推送給開發者,開發者可以在一段時間內(目前修改為48小時)呼叫客服介面,通過POST一個JSON資料包來傳送訊息給普通使用者。此介面主要用於客服等有人工訊息處理環節的功能,方便開發者為使用者提供更加優質的服務

永久素材
if (class_exists('\CURLFile')) {
    $data['media'] = new \CURLFile("E:/image/test.jpg", 'image/jpeg', 'test.jpg');
} else {
    $data['media'] = ["@$uploadfile;filename=" . $upload_image->name];
}
$url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=" . $this->getToken() . "&type=image";
$this->vpost($url, $data);
 臨時素材
$data['file'] = new \CURLFile("E:/image/test.jpg", 'image/jpeg', 'test.jpg');
 圖片預覽
$('img').click(function () {
    var baseUrl = 'http://' + location.host;
    var curSrc = baseUrl + $(this).attr('src');
    var imageList = [];
    $('img').each(function () {
        imageList.push(baseUrl + $(this).attr('src'));
    })
    photoRreview(curSrc, imageList);
});
function photoRreview(curSrc, imageList) {
    //$('img').unbind('click');
    wx.previewImage({
        current: curSrc, // 當前顯示圖片的http連結
        urls: imageList // 需要預覽的圖片http連結列表
    });
}

安卓手機清楚微信快取 http://debugx5.qq.com/

相關文章