美文网首页
扩展yii2-wx使jssdk支持前后端分离的项目

扩展yii2-wx使jssdk支持前后端分离的项目

作者: 有没有榴莲千层 | 来源:发表于2019-02-10 17:40 被阅读0次

    1、【后端】扩展Application类增加新的Js类的扩展类Jssdk

    <?php
    namespace common\helpers\wx;
    
    use yii\helpers\ArrayHelper;
    
    /**
     * Created by PhpStorm.
     * User: nodelog
     * Date: 2018/9/23
     * Time: 0:55
     */
    
    class Application extends \abei2017\wx\Application
    {
        public function init(){
            parent::init();
            $this->classMap =  ArrayHelper::merge($this->classMap, [
                'mp.jssdk'=>'common\helpers\wx\mp\Jssdk',    //  JSSDK
            ]);
        }
    }
    

    2、【后端】Jssdk类覆盖父类的signature函数增加url参数

    <?php
    namespace common\helpers\wx\mp;
    
    use abei2017\wx\mp\js\Js;
    use Yii;
    use yii\helpers\Json;
    
    /**
     * Created by PhpStorm.
     * User: nodelog
     * Date: 2018/9/23
     * Time: 1:08
     */
    
    class Jssdk extends Js
    {
        public function buildConfig($apis = [],$debug = false, $url){
    
            $signPackage = $this->signature($url);
            $config = array_merge(['debug'=>$debug],$signPackage,['jsApiList'=>$apis]);
    
            return Json::encode($config);
        }
    
        public function signature($url){
    
            $nonce = Yii::$app->security->generateRandomString(32);
            $timestamp = time();
            $ticket = $this->ticket();
    
            $sign = [
                'appId' => $this->conf['app_id'],
                'nonceStr' => $nonce,
                'timestamp' => $timestamp,
                'signature' => $this->getSignature($ticket, $nonce, $timestamp, $url),
            ];
    
            return $sign;
        }
    }
    

    3、【前端】ajax请求加入url参数

    $.get('api域名/weixin/jssdk',{
       'apis':'getLocation',                //jssdk api列表,多个api逗号分隔
       'debug': true,                         //是否开启调试
       'url':location.href.split('#')[0]        //签名的ur需要是当前网页的URL,不包含#及其后面部分
    },function (res) {
        wx.config(res.config);
    });
    

    4、【接口】api接口中buildConfig函数返回参数json解码

    <?php
    
    namespace api\modules\v1\controllers;
    
    use api\common\controllers\Controller;
    use common\helpers\wx\Application;
    use yii\helpers\Json;
    
    /**
     * Created by PhpStorm.
     * User: nodelog
     * Date: 2018/9/23
     * Time: 0:00
     */
    
    class WeixinController extends Controller
    {
        /**
         * JSSDK
         * @throws \abei2017\wx\core\Exception
         */
        public function actionJssdk()
        {
            $app = new Application(['conf' => \Yii::$app->params['wx']['mp']]);
            $js = $app->driver("mp.jssdk");
            
            $apis = explode(',', request('apis'));
            $debug = request('debug') == "true" ? true : false;
            $url = request('url');
            $config = $js->buildConfig($apis, $debug, $url);
            
            return ['config' => Json::decode($config)];
        }
    }
    

    原文:NODELOG

    相关文章

      网友评论

          本文标题:扩展yii2-wx使jssdk支持前后端分离的项目

          本文链接:https://www.haomeiwen.com/subject/xmdxeqtx.html