微信JS-SDK(PHP调用)

227 阅读1分钟
最近项目需要,需要调用微信的JS-SDK,加密信息需要服务端这边提供,首先需要在公众号后台添加接口域名,IP白名单等。
/**CURL*/ 
function curlPost($url, $data = [])
{   
  $ch = curl_init();  
  curl_setopt($ch, CURLOPT_POST, 1);    
  curl_setopt($ch, CURLOPT_HEADER, 0);   
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
  curl_setopt($ch, CURLOPT_URL, $url);    
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
  $result = curl_exec($ch);   
  curl_close($ch);  
  return $result;
}

/** 生成随机码*/ 
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;   
}
先获取access_token(有效期7200秒)
private function getJsdkToken(){        $url = https://api.weixin.qq.com/cgi-bin/token        $accesstoken = Cache::get('jsdk');        if(!$accesstoken) {            $queryarr = array(                "appid"      => $app_id,                'secret'     => $app_secret,                "grant_type" => "client_credential",            );            $response = curlPost($url, $queryarr);            $accesstoken  = (array)json_decode($response, true);            Cache::set('jsdk',$accesstoken,7000);        }        return $accesstoken['access_token'] ? $accesstoken['access_token'] : [];    }
通过acces_token获取Jsapi_ticket(有效期7200秒)
private function getApiTicket()
{     
  $url = https://api.weixin.qq.com/cgi-bin/ticket/getticket 
  $apiticket  = Cache::get('apiticket');    
  if(!$apiticket) {          
      $accesstoken = $this->getJsdkToken();           
      $queryarr = array('access_token' => $accesstoken ,   
                  "type" => "jsapi");          
      $response = curlPost($url, $queryarr);         
      $apiticket  = (array)json_decode($response, true);          
      Cache::set('apiticket'$apiticket,7000);      
  }      
  return $apiticket['ticket'] ? $apiticket['ticket'] : [];   
}
获得jsapi_ticket,就可以获取JS-SDK权限验证签名 url是前端传过来的
public function getSignPackage($url)
{   
     $jsapiTicket = $this->getApiTicket();
     $timestamp = time();        
     $nonceStr = $this->createNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序 
     $string = "jsapi_ticket=".$jsapiTicket."&noncestr=".$nonceStr."&timestamp=".$timestamp."&url=".$url;       
     $signature = sha1($string);        
     $wxConfig = Wxapp::getWxappCache();    //获取微信配置消息   
     $signPackage = array("appId"=> $app_id,"nonceStr"  => $nonceStr, 
                 "timestamp" => $timestamp,"signature" => $signature);       
     return $signPackage;   
 }
前端需要的这些参数返回过去即可,如有其他问题可以查看微信官方文档
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html
网页的URL,不包含#及其后面部分。注意:对于没有只有域名没有 path 的 URL ,浏览器会自动加上 / 作为 path,如打开 http://qq.com 则获取到的 URL 为 http://qq.com/),以上仅供参考。