首先,在静态页面中,添加微信的配置文件,通过js获取。
<script type="text/javascript">
wx.config({
debug: false,
appId: \'{$signPackage.appId}\',
timestamp: \'{$signPackage.timestamp}\',
nonceStr: \'{$signPackage.nonceStr}\',
signature: \'{$signPackage.signature}\',
jsApiList: [
// 所有要调用的 API 都要加到这个列表中
\'checkJsApi\',
\'openLocation\',
\'getLocation\',
\'scanQRCode\'
]
});
wx.ready(function () {
$(\'#scan\').click(function(){
wx.scanQRCode({
needResult: 0,
});
});
wx.checkJsApi({
jsApiList: [
\'getLocation\'
],
success: function (res) {
if (res.checkResult.getLocation == false)
{
alert(\'你的微信版本太低,不支持微信JS接口,请升级到最新的微信版本!\');
return;
}
}
});
wx.getLocation({
success: function (res) {
var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
var geoconv = \'http://api.map.baidu.com/geoconv/v1/?callback=coordinateTransformation&coords=\' + longitude + \',\' + latitude + \'&from=1&to=5&ak=5BFNbSgnVF5g2O72NpvTDxFm\';
var script = document.createElement(\'script\');
script.src = geoconv;
document.head.appendChild(script);
},
cancel: function (res) {
alert(\'用户拒绝授权获取地理位置\');
}
});
});
function coordinateTransformation(data)
{
var LATLNG = data.result[0].y + \',\' + data.result[0].x;
var url = \'http://api.map.baidu.com/geocoder/v2/?callback=getCurrentLocation&ak=5BFNbSgnVF5g2O72NpvTDxFm&location=\' + LATLNG + \'&output=json&pois=1\';
var script = document.createElement(\'script\');
script.src = url;
document.head.appendChild(script);
}
function getCurrentLocation(data)
{
if(data.status === 0)
{
var address = data.result.formatted_address,
x = data.result.location.lng,
y = data.result.location.lat,
city = data.result.addressComponent.city,
street = data.result.addressComponent.street || data.result.formatted_address,
reqData = \'street=\' + address + \'&name=\' + street + \'&lng=\' + x + \'&lat=\' + y + \'&city=\' + city;
var url = "{:U(\'Index/savePosition\')}";
$.getJSON(url,{\'name\':street,\'lng\':x,\'lat\': y,\'city\':city},function(data)
{
if(data.returnCode) { }
});
}
}
</script>
其次,在控制器中接收ajax传递的地理坐标,然后保存到session中。
public function savePosition()
{
$city = II(\'get.city\',\'\',\'trim\');
$addr = II(\'get.name\',\'\',\'trim\');
$lng = II(\'get.lng\',\'\',\'trim\');
$lat = II(\'get.lat\',\'\',\'trim\');
$myLocation = array(
\'city\' =>$city,
\'addr\' =>$addr,
\'lng\' =>$lng,
\'lat\' =>$lat,
);
$_SESSION[\'MyLocation\'] = $myLocation;
$data[\'returnCode\'] = 1;
$data[\'returnInfo\'] = \'获取位置成功!\';
$this->ajaxReturn($data);
return;
}
注:用的是thinkphp框架,II是自定义的方法,获取get或post传递的值,和 I 函数一样。