zoukankan      html  css  js  c++  java
  • 微信sdk 签名

    <?php
    namespace appwechatservice;
    use thinkConfig;
    class Signature
    {    
        protected $appId ;
        protected $appSecret;
        protected $path;
    
        public function __construct($type='service') {
    
            $this->appId      = Config::get('wx_'.$type.'.appId');
            $this->appSecret = Config::get('wx_'.$type.'.appSecret');
            $this->path      = Config::get('wx_'.$type.'.fileUrl');
        }
        public function getSignPackage() {
    
            $jsapiTicket = $this->getJsApiTicket();
            $url = urldecode($_GET['sign_url']);
            $timestamp = time();
            $nonceStr = get_rand_str(16, 0, 1, 0);
            // 这里参数的顺序要按照 key 值 ASCII 码升序排序
            $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
            $signature = sha1($string);
            $signPackage = array(
                "appId"     => $this->appId,
                "nonceStr"  => $nonceStr,
                "timestamp" => $timestamp,
                "url"       => $url,
                "signature" => $signature,
                "rawString" => $string
            );
            return $signPackage; 
        }
    
        private function getJsApiTicket() {
    
            $JsApiTicket = $this->path . "JsApiTicket_pssh.json";//缓存文件名
            !is_file($JsApiTicket) && touch($JsApiTicket, '777');
            $data = json_decode(file_get_contents($JsApiTicket), true);
            if ($data['expire_time'] < time() or !$data['expire_time']) {
                $accessToken = $this->access_Token();
                $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
                $res = json_decode(httpRequest($url, 'GET'), true);
                $ticket = $res['ticket'];
                if ($ticket) {
                    $data['expire_time'] = time() + 7000;
                    $data['jsapi_ticket'] = $ticket;
                    $fp = fopen($JsApiTicket, "w+");
                    fwrite($fp, json_encode($data));
                    fclose($fp);
                }
            } else {
                $ticket = $data['jsapi_ticket'];
            }
            return $ticket;
        }
    
        public function access_Token() {
    
            $tokenFile = $this->path . "accessToken_pssh.json";//缓存文件名
            !is_file($tokenFile) && touch($tokenFile, '777');
            $data = json_decode(file_get_contents($tokenFile), true);
            if ($data['expire_time'] < time() or !$data['expire_time']) {
                $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appId=".$this->appId."&secret=".$this->appSecret;
                $res = httpRequest($url, 'GET');
                $res = json_decode($res,true);
                $access_token = $res['access_token'];
                if($access_token) {
                    $data['expire_time'] = time() + 7000;
                    $data['access_token'] = $access_token;
                    $fp = fopen($tokenFile, "w");
                    fwrite($fp, json_encode($data));
                    fclose($fp);
                }
            } else {
                $access_token = $data['access_token'];
            }
            return $access_token;
        }
    
    }

    使用 (上面的配置文件根据自己的需要写)

    public function getSignPackage()
        {
            $sign = new SignatureService('service');
            $result = $sign->getSignPackage();
            return json($result);
        }

    这是基于TP5写的  自己记录用  要是能看懂就拿走 

    SignatureService()方法里面的参数是区分不同公众号 这样也要有不同的配置文件
    function share_disable(){
            $.ajax({
                type: 'GET',
                url: localurl + "/index.php/……/getSignPackage",
                data: {sign_url:encodeURIComponent(location.href.split('#')[0])},
                dataType: 'JSON',
                success: function(data){
    
                    wx.config({
                    // debug :true,
                    appId: data.appId,
                    timestamp: data.timestamp,
                    nonceStr: data.nonceStr,
                    signature: data.signature,
                    jsApiList: [
                    "hideMenuItems"
                    ]
                });
                    wx.ready(function () {
                        wx.hideMenuItems({
                            menuList: [ 
                            "menuItem:share:qq",
                            "menuItem:share:timeline",
                            "menuItem:share:appMessage",
                            "menuItem:share:QZone",
                            "menuItem:share:weiboApp",
                            "menuItem:favorite",
                            "menuItem:share:facebook",
                            "menuItem:copyUrl",
                            "menuItem:openWithQQBrowser",
                            "menuItem:share:email",
                            "menuItem:openWithSafari",
                            "menuItem:originPage"
                                ] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
                            });
                    }); 
                }
            });
    
        }

    这是隐藏分享按钮的示例  

  • 相关阅读:
    在 Xcode 6 中使用矢量图( iPhone 6 置配 UI)
    在Xcode中使用Git进行源码版本控制
    UIAlertController Changes in iOS 8
    iOS8需要兼容的内容
    iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)
    一些被提问频率最高的12个php面试题,以及对应的常规回答。
    MYSQL 优化常用方法(转载)
    mysql 性能优化方案 (转)
    练手mysqlbinlog日志恢复数据(centos6.5 64,mysql5.1)
    cnblogs博客申请完毕,以后再这里安家落户
  • 原文地址:https://www.cnblogs.com/88phper/p/7918674.html
Copyright © 2011-2022 走看看