H5 唤醒腾讯地图百度地图并导航

该功能基于微信js 详细demo:http://203.195.235.76/jssdk/

说明文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

html
使用时只需要调用 goAddress();即可

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"> </script>
<script>
    var data = '{$wxjssdk}';
    var config = JSON.parse(data);
    wx.config(config);
</script>
<script>
    function goAddress(){
        wx.ready(function () {
            wx.openLocation({
                latitude: '{$work.wd}', // 纬度,浮点数,范围为90 ~ -90
                longitude: '{$work.jd}', // 经度,浮点数,范围为180 ~ -180。
                name: '{$work.used_address}{$work.elevator_address}', // 位置名
                address: '{$work.used_address}{$work.elevator_address}', // 地址详情说明
                scale: 15, // 地图缩放级别,整形值,范围从1~28。默认为最大
                infoUrl: 'http://apis.map.qq.com/uri/v1/marker?marker=coord:{$work.jd},{$work.wd};title:{$work.used_address}{$work.elevator_address};addr:电梯位置' // 在查看位置界面底部显示的超链接,可点击跳转
            });
        });
    }
</script>

控制器

public function baoyang()
{
    $jssdk = new JssdkwxService();
    $wxjssdk = $jssdk->getJssdk();
    $this->assign('wxjssdk',$wxjssdk);
    $this->display();
}

封装微信js类

<?php

namespace Common\Service;

use Extend\JSSDK;

/**
 * This is the jssdk behavior
 */
class JssdkwxService {
    /**
     * @var JSSDK
     */

    /**
     * @var array
     */
    private $wxconfig = array('debug', 'appId', 'timestamp', 'nonceStr', 'signature', 'jsApiList');

    /**
     * @var array
     */
    private $jsapilist = array(
        'onMenuShareTimeline',
        'onMenuShareAppMessage',
        'onMenuShareQQ',
        'onMenuShareWeibo',
        'onMenuShareQZone',
        'openLocation',
        'getLocation',
        'scanQRCode',
        //'translateVoice',
        //'startRecord',
        //'stopRecord',
        //'onVoiceRecordEnd',
        //'playVoice',
        //'pauseVoice',
        //'stopVoice',
        //'onVoicePlayEnd',
        //'uploadVoice',
        //'downloadVoice',
        //'chooseImage',
        //'previewImage',
        //'uploadImage',
        //'downloadImage',
        //'getNetworkType',
        //'hideOptionMenu',
        //'showOptionMenu',
        //'hideMenuItems',
        //'showMenuItems',
        //'hideAllNonBaseMenuItem',
        //'showAllNonBaseMenuItem',
        //'closeWindow',
        //'chooseWXPay',
        //'openProductSpecificView',
        //'addCard',
        //'chooseCard',
        //'openCard',
    );

    /**
     * init
     */

    /**
     * execute the behavior
     */
    public function getJssdk($tzurl) {
        $accesstokenService = new AccesstokenService();
        $access = $accesstokenService->getAccessToken();
        $jssdk = new JSSDK(C('WX_APPID'), C('WX_APPSECRET'),$access['jsapi_ticket'],$tzurl);
        $signPackage = $jssdk->GetSignPackage();
        $wxjssdk = $this->_handleParams($signPackage);
        $wxjssdk['debug'] = false;
        return json_encode($wxjssdk);
    }

    /**
     * handle the params
     *
     * @param array $package
     * @return array
     */
    private function _handleParams(array $package) {
        $data = array_merge(array_flip($this->wxconfig), $package);
        $data['jsApiList'] = $this->jsapilist;
        return $data;
    }

}

微信jssdk 可以在官网下载,下载后可以根据自己的需要封装 这里只给他增加了命名空间

<?php
namespace Extend;

class JSSDK {
  private $appId;
  private $appSecret;
  private $jsapi_ticket;
  private $tzurl;

  public function __construct($appId, $appSecret,$jsapi_ticket,$tzurl=null) {
    $this->appId = $appId;
    $this->appSecret = $appSecret;
    $this->jsapi_ticket = $jsapi_ticket;
    $this->tzurl = $tzurl;
  }

  public function getSignPackage() {
    $jsapiTicket = $this->jsapi_ticket;

    // 注意 URL 一定要动态获取,不能 hardcode.
      if($this->tzurl){
          $url = str_replace('amp;','',$this->tzurl);
      }else{
          $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 码升序排序
    $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 createNonceStr($length = 16) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
      $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
  }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值