慕容的工作随笔

慕容的工作随笔

记录学习和工作

PHP 实现 获取JS-SDK签名 调用微信功能接口

2017-09-12 13:21:17

<?php
/**

  • 1.获取ac_token
  • 2.获取微信临时票据
  • 3.获取JSSDK 签名信息。(用于调用微信JS-SDK用)

*/

define(‘APP_ID’,‘wx60cf2bbb7d439XXX’);
define(‘APP_SEC’,‘d7b96a06768e0a302669e51389aaeeXXX’);

$wx_token = getAccessToken(APP_ID,APP_SEC); //获取ac_token (生存时间7200 , 获取后需设置缓存)
$ticket = getTicket($wx_token); // 使用token 获取JsApiTicket(调用微信临时票据;生存时间7200 , 获取后需设置缓存)
$signPackage = getSignPackage(getCurrentUrl(), $ticket, APP_ID);//获取JSSDK签名信息 ,通过config接口注入权限验证配置

/**

*/

/**

  • 获取微信基础AccessToken
  • @param type $getNewToken 是否强制刷新
  • @return type
    */
    function getAccessToken($appid,$appsecret) {
    $key = ‘AccessToken_’ . $appid . ‘_’ . $appsecret;
    $wx_token = ‘’;
    $accessToken = getWxAccessToken( $appid, $appsecret);
    $wx_token = $accessToken[‘access_token’];
    return $wx_token;
    }

/**

  • 获取基础AccessToken
  • @param type $appid
  • @param type $appSecret
  • @param type $type
  • @return type
    */
    function getWxAccessToken($appid, $appSecret, $type = ‘client_credential’) {
    $url = ‘https://api.weixin.qq.com/cgi-bin/token?grant_type=' . $type . ‘&appid=’ . $appid . ‘&secret=’ . $appSecret;
    $data = http($url,null ,‘GET’);
    $json = json_decode($data, true);
    return $json;
    }

/**

  • 获取调用微信临时票据
  • @param type $access_token 全局唯一票据
  • @param type $type
  • @return type
    */
    function getTicket($access_token, $type = ‘jsapi’) {
    $url = ‘https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' . $access_token . ‘&type=’ . $type;
    $result = http($url);
    $json = json_decode($result, true);
    return $json;
    }

/**

  • 获取JSSDK签名信息
  • @param type $url
  • @param type $ticket
  • @return type
    */
    function getSignPackage($url, $ticket ,$appId) {
    $timestamp = time();
    $nonceStr = getNonceStr();
    // 这里参数的顺序要按照 key 值 ASCII 码升序排序
    $string = “jsapi_ticket=$ticket&noncestr=$nonceStr&timestamp=$timestamp&url=$url”;
    $signature = sha1($string);
    $signPackage = array(
    ‘appId’ => $appId,
    ’nonceStr’ => $nonceStr,
    ’timestamp’ => $timestamp,
    ‘url’ => $url,
    ‘signature’ => $signature,
    ‘rawString’ => $string
    );
    return $signPackage;
    }

function getNonceStr($length = 16) {
$chars = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789’;
$str = ‘’;
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}

/**

  • 获取当前访问的地址
  • @return string
  • 需开启php curl 扩展
    */
    function getCurrentUrl() {
    $protocol = (!empty($_SERVER[‘HTTPS’]) && $_SERVER[‘HTTPS’] !== ‘off’ || $_SERVER[‘SERVER_PORT’] == 443) ? “https://” : “http://”;
    $url = $protocol . $_SERVER[“HTTP_HOST”] . $_SERVER[“REQUEST_URI”];
    return $url;
    }

function http($url, $param = null, $method = ‘POST’) {
try {
$opts = array(
CURLOPT_TIMEOUT => 30,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
);
/* 根据请求类型设置特定参数 /
$opts[CURLOPT_URL] = $url;
if (strtoupper($method) == ‘POST’ && !is_null($param)) {
$opts[CURLOPT_POST] = 1;
$opts[CURLOPT_POSTFIELDS] = $param;
if (is_string($param)) { //发送JSON数据
$opts[CURLOPT_HTTPHEADER] = array(
‘Content-Type: application/json; charset=utf-8’,
‘Content-Length: ’ . strlen($param),
);
}
}
/
初始化并执行curl请求 */
$ch = curl_init();
curl_setopt_array($ch, $opts);
$data = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error) {//发生错误
//throw new \Exception(‘请求发生错误:’ . $error);
$data = array(’errcode’ => -1, ’errmsg’ => $error);
}
} catch (\Exception $ex) {
$data = array(’errcode’ => -1, ’errmsg’ => $ex->getMessage());
}
return $data;
}

评论 (0)

还没有评论,来做第一个吧。

发表评论

提交后需管理员审核通过后显示