前端
引入JS文件
<script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
或
<script src="http://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
后端
PHP-Main
if (empty(Cache::get('accessToken'))) {
$access_token = $this->getAccessToken($setting['weixin_appid'], $setting['weixin_appsecret']);// 传入微信公众号信息
Cache::set('accessToken', $access_token, 7200);
}
else {
$access_token = Cache::get('accessToken');
}
if (empty(Cache::get('jsapiTicket'))) {
$jsapi_ticket = $this->getJsapiTicket($access_token);// 传入access_token
Cache::set('jsapiTicket', $jsapi_ticket, 7200);
}
else {
$jsapi_ticket = Cache::get('jsapiTicket');
}
if ($jsapi_ticket) {
$timestamp = time();
$nonceStr = $this->createNonceStr();
$http = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url = "$http$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; // 调用JSSDK的页面地址
$str = "jsapi_ticket={$jsapi_ticket}&noncestr={$nonceStr}×tamp={$timestamp}&url={$url}";
$signature = sha1($str);
}
//$access_token、$jsapi_ticket、$signature均已获取
PHP-Function
public function getAccessToken($appid, $secret)
{
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
$res = $this->curl_get($url);
if ($res['errcode'] != 0) return false;// 获取AccessToken错误
return $res['access_token'];
}
public function getJsapiTicket($access_token)
{
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$access_token}&type=jsapi";
$res = $this->curl_get($url);
if ($res['errcode'] != 0) return false;// 获取JsapiTicket错误
return $res['ticket'];
}
public function curl_get($url)
{
$headerArray = array("Content-type:application/json;", "Accept:application/json");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
$output = curl_exec($ch);
curl_close($ch);
$output = json_decode($output, true);
return $output;
}
public function curl_post($url, $data)
{
$data = json_encode($data);
$headerArray = array("Content-type:application/json;charset='utf-8'", "Accept:application/json");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return json_decode($output, true);
}
public 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;
}
标签:setopt,微信,jsapi,JS,access,token,curl,ticket,CURLOPT
From: https://www.cnblogs.com/guowenrui/p/17067369.html