Thinkphp5.1调用微信扫一扫实例,学会再也不怕客户在微信提的奇葩要求了

哎!苦于客户一直要求,官方文档看起来又蛋疼,磨了一个下午整理出一套试用Thinkphp5.1 调用微信扫一扫示例

别小瞧这些代码哦,它们能帮你实现几乎所有的微信功能^_^

示例地址:http://spt.zmtek.net/Wxshop/Wxtest/options (手机微信打开)

1 先在Thinkphp -- Vendor 目录下面创建WxJDK文件夹,然后在创建文件JSSDK.php.

<?php

namespace WxJDK;

class JSSDK

{

    //公众号appid ,公众号开发配置处可查看

    public    $appId;

//公众号appi , 公众号开发配置处可查看

    private $appSecret;

/**

    * @name        初始化参数

    * @author        cq <just_leaf@foxmail.com>

    * @copyright    zydbbt 2018-10-27

*/

    public function __construct($appId ,$appSecret ){

        $this    -> appId            = $appId;

$this    -> appSecret        = $appSecret;

}

    /**

    * @name        获取accessToken

    * @author        cq <just_leaf@foxmail.com>

    * @copyright    zydbbt 2018-10-27

*/

    public function getAcc(){

        return $this -> getAccessToken();

}

    /**

    * @name        获取config接口注入权限验证配置

    * @author        cq <just_leaf@foxmail.com>

    * @copyright    zydbbt 2018-10-27

*/

    public function getWxConfig(){

        # - 获取 jsapi_ticket

        $jsapiTicket = $this -> getJsApiTicket();

# - 获取调用页面的url

        $protocol = (!empty($_SERVER['HTTPS'])&& $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443)? "https://" : "http://";

$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

# - 时间戳

        $timestamp = time();

# - 获取随机字符串

        $nonceStr = $this -> createNonceStr();

# - 这里参数的顺序要按照 key 值 ASCII 码升序排序

# - 亦可把参数以数组存值,ksort() - 以升序对关联数组进行排序

        $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";

# - sha1获取签名

        $signature = sha1($string);

# - 页面所需注入参数

        $WxConfig = array(

"appId"    => $this -> appId,

"nonceStr"  => $nonceStr,

"timestamp" => $timestamp,

"url"      => $url,

"signature" => $signature,

"rawString" => $string

        );

# - 返回

        return $WxConfig;

}

    /**

    * @name        获取JsApiTicket

    * @author        cq <just_leaf@foxmail.com>

    * @copyright    zydbbt 2018-10-27

*/

    private function getJsApiTicket(){

        # - 判断缓存

        $ticket = session('ticket');

if(!$ticket){

            # - 获取

            $accessToken = $this->getAccessToken();

# - 获取Ticket

# - 如果是企业号用以下 URL 获取 ticket

            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";

# - get请求,转换数组

            $result = json_decode($this->httpGet($url),true);

$ticket = $result['ticket'];

# - 全局缓存

            if ($ticket){

                # - 官方返回

# - {

# -        "errcode":0,

# -        "errmsg":"ok",

# -        "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",

# -    "expires_in":7200

# - }

//                session('ticket',$ticket,$result['expires_in']);

                session('ticket',$ticket);

}

}

        # - 返回

        return $ticket;

}

    /**

    * @name        获取AccessToken

    * @author        cq <just_leaf@foxmail.com>

    * @copyright    zydbbt 2018-10-27

*/

    private function getAccessToken(){

        # - 判断缓存

        $access_token = session('accesToken');

if(!$access_token){

            # - 如果是企业号用以下URL获取access_token

            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";

# - get请求,转换数组

            $result = json_decode($this->httpGet($url),true);

$access_token = $result['access_token'];

# - 全局缓存

            if ($access_token){

//                session('accesToken',$result['access_token'],$result['expires_in']);

                session('accesToken',$result['access_token']);

}

}

        # - 返回

        return $access_token;

}

    /**

    * @name        GET请求

    * @author        cq <just_leaf@foxmail.com>

    * @copyright    zydbbt 2018-10-27

*/

    private function httpGet($url){

        # - 初始化

        $curl = curl_init();

# - 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。

# - 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。

        curl_setopt($curl,CURLOPT_URL,$url);

curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);

curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);

curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);

curl_setopt($curl,CURLOPT_TIMEOUT,500);

# - 请求

        $res = curl_exec($curl);

//        $res = json_decode($res, true);

# - 关闭

        curl_close($curl);

# - 返回

        return $res;

}

    /**

    * @name        POST请求

    * @author        cq <just_leaf@foxmail.com>

    * @copyright    zydbbt 2018-10-27

*/

    private function httpPost($url,$query_data){

        # - 初始化

        $curl = curl_init();

# - 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。

# - 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。

        curl_setopt($curl,CURLOPT_URL,$url);

curl_setopt($curl,CURLOPT_POSTFIELDS,$query_data);

curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);

curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);

curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);

curl_setopt($curl,CURLOPT_TIMEOUT,500);

# - 请求

        $res = curl_exec($curl);

//        $res = json_decode($res, true);

# - 关闭

        curl_close($curl);

# - 返回

        return $res;

}

    /**

    * @name        产生随机字符串

    * @author        cq <just_leaf@foxmail.com>

    * @copyright    zydbbt 2018-10-27

*/

    private 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;

}

    public function getCommodityInfo($sub){

//聚合数据接口

# - 如果是企业号用以下URL获取access_token

        $url = "http://feedback.api.juhe.cn/ISBN?key=c74a5cde7c1e58709624454f18447a54&sub=".$sub;

# - get请求,转换数组

        $result = json_decode($this->httpGet($url),true);

halt($result);

}

}



2 把网站的Ip 授权,不然无法获取access_token值,那么jspai_ticket也将无法获取

使用方法看下列代码:

php:action如下


namespace app\index\controller;

use app\common\controller\Base;

use think\Loader;

class Smsb extends Base

{

    public function index()

{

        # 公众号获取

        $appid = config('wechat')['wechat_options']['appid'];

# 公众号获取

        $appSecret = config('wechat')['wechat_options']['appsecret'];

# 实例化

        $wx = new \WxJDK\JSSDK($appid,$appSecret);

# 获取参数

        $info = $wx-> getWxConfig();

$info['url']=str_replace('http://','',$info['url']);

# 传参页面

        $this -> assign('wxConfig',$info);

return $this->fetch('');

}

  public function WeChat()

{

        return ['appId'=>config('WeChat')['appId'],'timestamp'=>time(),'noncestr'=>'123456','signature'=>''];

}

    public function sp(){

        # 公众号获取

        $appid = config('wechat')['wechat_options']['appid'];

# 公众号获取

        $appSecret = config('wechat')['wechat_options']['appsecret'];

$wx = new \WxJDK\JSSDK($appid,$appSecret);

$wx->getCommodityInfo(input('ISBN'));

return $this->fetch('index');

}

    public function hello($name = 'ThinkPHP5')

{

        return 'hello,' . $name;

}

}


html:页面如下

<!DOCTYPE html>

<html>

  <head>

      <meta charset="utf-8" />

      <title></title>

      <script src="/static/js/jquery-1.8.3.min.js" type="text/javascript" charset="utf-8"></script>

      <script src="/static/js/jweixin-1.4.0.js" type="text/javascript" charset="utf-8"></script>

  </head>

  <body>

      <a class="weui-btn weui-btn_primary submit-btn" id="wxcode" type="button">扫一扫</a>

  <div id="content"></div>

  </body>

</html>

<script>

  wx.config({

      // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

      debug: false,

// 必填,公众号的唯一标识

      appId: "{$wxConfig.appId}",

// 必填,生成签名的时间戳

      timestamp:"{$wxConfig.timestamp}",

// 必填,生成签名的随机串

      nonceStr:"{$wxConfig.nonceStr}",

// 必填,签名,见附录1

      signature:"{$wxConfig.signature}",

// 必填,需要使用的JS接口列表,所有JS接口列表见附录2

      jsApiList : [ 'scanQRCode' ]

  });

wx.error(function(res){

            alert("----------出错了-----------:" + res.errMsg);//这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。

  });

wx.ready(function(){

      wx.checkJsApi({

        jsApiList : ['scanQRCode'],

success : function(res){

}

      });

//点击按钮扫描二维码

      $('#wxcode').click(function(){

//              alert(1);

        wx.scanQRCode({

            needResult: 1,// 默认为0,扫描结果由微信处理,1则直接返回扫描结果,

            scanType: ["qrCode","barCode"],// 可以指定扫二维码还是一维码,默认二者都有

            success: function (res){

              var result = res.resultStr;// 当needResult 为 1 时,扫码返回的结果

              result=result.replace('EAN_13,','');

var url= '{:url("smsb/sp")}';

url = url+'?ISBN='+result;

//            $('#content').html(url);

              window.location = url;

}

        });

})

});

</script>



转自https://www.cnblogs.com/leaf-cq/p/8877270.html 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342