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

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

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

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

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

namespace WxJDK;

class JSSDK

{

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

    public    $appId;

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

    private $appSecret;

/**

    * @name        初始化参数

    * @author        cq

    * @copyright    zydbbt 2018-10-27

*/

    public function __construct($appId ,$appSecret ){

        $this    -> appId            = $appId;

$this    -> appSecret        = $appSecret;

}

    /**

    * @name        获取accessToken

    * @author        cq

    * @copyright    zydbbt 2018-10-27

*/

    public function getAcc(){

        return $this -> getAccessToken();

}

    /**

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

    * @author        cq

    * @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×tamp=$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

    * @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

    * @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

    * @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

    * @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

    * @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:页面如下

 

     

     

     

     

 

 

      扫一扫

 

 



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

你可能感兴趣的:(Thinkphp5.1调用微信扫一扫实例,学会再也不怕客户在微信提的奇葩要求了)