HTML
<!-- 开启扫一扫 -->
<input type="button" id="wxcode" style="width:100%;height:10%;font-size:80px" value="微信扫一扫">
JavaScript
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>
<!--
扫一扫
-->
<script>
$(function(){
//获取URL地址后的参数 传到后台处理
var urltail = String(window.location.search);
$.ajax({
type:"post",
dataType:"json",
data:{urltail:urltail},
url:"{pigcms::U('Wechat/getSignPackage')}",
success:function(data){
wx.config({
debug : false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId : data.appId, // 必填,公众号的唯一标识
timestamp :data.timestamp, // 必填,生成签名的时间戳
nonceStr : data.nonceStr, // 必填,生成签名的随机串
signature : data.signature,// 必填,签名,见附录1
jsApiList : ['translateVoice','scanQRCode']
// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
$('#wxcode').click(function(){
// alert(1);
wx.scanQRCode({
needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
success: function (res) {
var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
}
});
})
}
})
})
</script>
PHP
<?php
Class WechatAction extends Action
{
/**
* [getSignPackage 主程序]
* @return [type] [description]
*/
public function getSignPackage() {
if(IS_POST){
$urltail = I('post.urltail');
$urltail = str_replace('amp;','',$urltail); //打印出链接中有 amp; 用这步
}
$jsapiTicket = $this->getJsApiTicket();
//自动识别 http 或者 https
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
//拼接url地址
$url = $protocol.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$urltail;
$nonceStr = $this->createNonceStr();
$Parameters["jsapi_ticket"]=$jsapiTicket;
$Parameters['url'] = $url;
//测试时候可以先用当前访问的url地址 固定值测试
// $Parameters["url"]= "http://m.lingdie.com/index.php?g=Wap&m=Yangrui&a=index&token=xylbpw1535431552&diymenu=1";
$Parameters["timestamp"]= time();
$Parameters["noncestr"] = $nonceStr;
$signature =$this->genSha1Sign($Parameters);
$signPackage = array(
"appId" => "wx380b174948da9a37",
"nonceStr" => $Parameters["noncestr"],
"timestamp" => $Parameters["timestamp"],
"signature" => $signature,
"url" => $Parameters['url']
);
echo json_encode($signPackage);
}
/**
* [genSha1Sign 生成 signature]
* @param
* @return
*/
public function genSha1Sign($Parameters){
$signPars = '';
ksort($Parameters);
foreach($Parameters as $k => $v) {
if("" != $v && "sign" != $k) {
if($signPars == '')
$signPars .= $k . "=" . $v;
else
$signPars .= "&". $k . "=" . $v;
}
}
//$signPars = http_build_query($Parameters);
$sign = SHA1($signPars);
$Parameters['sign'] = $sign;
return $sign;
}
/**
* [createNonceStr 生成随机码]
* @param integer $length [description]
* @return [type] [description]
*/
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;
}
/**
* [getJsApiTicket 获取jsapi-ticket]
* @return [type] [description]
*/
private function getJsApiTicket() {
$url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$this->getAccessToken()."&type=jsapi";
$jsapi_data=$this->httpGet($url);
$jsapi_array=json_decode($jsapi_data,true);
$ticket=$jsapi_array['ticket'];
return $ticket;
}
/**
* [getAccessToken 获取access_token]
* @return [type] [description]
*/
private function getAccessToken() {
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx380b174948da9a37&secret=4eee68a97a7b566e5babc78af0d53005";
$res = json_decode($this->httpGet($url));
$access_token = $res->access_token;
return $access_token;
}
/**
* [httpGet http请求]
*/
public function httpGet($url, $data = null)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
}