2019独角兽企业重金招聘Python工程师标准>>>
获取微信信息,我这是php代码
//获取微信信息
public function getSignPackage() {
$appId = $this->_mp['appid'];
$appSecret = $this->_mp['appsecret'];
$jsapiTicket = $this->getJsApiTicket($appId,$appSecret);
// 注意 URL 一定要动态获取,不能 hardcode.
$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×tamp=$timestamp&url=$url";
$signature = sha1($string);
$signPackage = array(
"appId" => $appId,
"nonceStr" => $nonceStr,
"timestamp" => $timestamp,
"url" => $url,
"signature" => $signature,
"rawString" => $string
);
return $signPackage;
}
然后前端引入js
初始化
代码很简单,根本没有变动,完全按照官网的api写的,就连参数都是用的官网的参数,怎么地图的出不来,尤其ios安装有的时候还能出来,但是也是随机性,我在网上找了很久解决办法,发现遇见问题的人不少,还挺多的,但是没有一种办法能解决问题,下面我说下网上解决办法
第一种:都是让你看看你的初始化里面是否添加了你要用的接口
第二种:坐标参数是不允许用字符串的
第三种:坐标参数是火星坐标,也就是说你先调用getLocation获取坐标信息,然后在调用openLocation来实现地图展示
我记忆里就大概就这三个了,我都尝试了,就是出不来不知道为啥,初始化里面肯定添加了,因为我尝试用checkJsApi这个接口来检测了(用来检测你要用的接口是否可用),返回的信息是ok,openLocation这个接口是可以用的,但是执行到这个接口的时候就报错,提示没有权限,怎么都掉不通
解决办法
墨迹半天了,说最后问题出在了那里,其实很简单,就是执行顺序问题
具体微信是怎么做的我不知道,但是你初始化接口的时候,是要一定的时间的,有些接口会很快,但是有些接口确实慢,也许是他要加载一些东西吧
比如我用过几个接口getLocation,checkJsApi,uploadImage,previewImage等等 都是没有问题的,上面的代码那样写没有问题,api都是通的,但是openLocation这个接口就不行了,官网的dome就能出来,自己本地就是出不来,最后我发现一个问题,就是官网的config是页面直接写在script标签里面的,但是所有的接口都是写在一个文件里面的ready这里面的接口都是写在一个js文件里面的,然后页面引入这个文件就好了,只要你把ready里面所用的接口都放在一个文件里面,所有的接口都通,openLocation这个接口自然也就通了
这就是我所说的,就是页面加载顺序,如果你把代码放在一个js文件里面是最后加载的,但是在script标签里面的代码是先执行的,跟随dome一起加载,这些都加载完了在加载js文件,有人会说如果把js文件写在前面不就行了吗,那也不行,就算你写在前面页面执行到你script标签的时候发现是一个文件,那么他就得去服务器取这个文件,然后在加载到页面上,速度还是不如script执行的快,因为有网络延迟
暂时就遇到这些问题,以后如果有问题继续补充,也欢迎大家有问题评论在下面,我去验证,然后加上