zhaoxiwang
1.控制器代码
    require "./jssdk.php";    //引入jssdk
 
//微擎里面示范
   public function doMobileStartsao() {
        $jssdk = new JSSDK("wx72835f30e304f81c","2cb650d2acc08ac7061504d0b64e3af4");   // appid appsecret
        $signPackage = $jssdk->GetSignPackage();
        include $this->template(\'startsao\');
   }


2.页面代码
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script><div style="width: 60%;text-align: center;height: 30px;background-color:#98FB98;padding-top:7px;margin-left: 20%" id="sao">扫码开始</div>

<script>
    $("#sao").click(function(){

        var appId = "<?php echo $signPackage[\'appId\']; ?>";
        var timestamp = "<?php echo $signPackage[\'timestamp\']; ?>";
        var nonceStr = "<?php echo $signPackage[\'nonceStr\']; ?>";
        var signature = "<?php echo $signPackage[\'signature\']; ?>";

        wx.config({
             debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
             appId: appId, // 必填,公众号的唯一标识
             timestamp: timestamp, // 必填,生成签名的时间戳
             nonceStr: nonceStr, // 必填,生成签名的随机串
             signature: signature,// 必填,签名,见附录1
             jsApiList: [\'checkJsApi\',
            \'scanQRCode\',] // 必填,需要使用的JS接口列表
        });

        wx.ready(function(){
            wx.scanQRCode({
            needResult: 0,    // 为 1 时扫码直接显示结果不可跳转  为 0 时可跳转              
            desc: \'scanQRCode desc\',
            success: function (res) {
                  var url = res.resultStr;
                  var tempArray = url.split(\'?\');
                  var tempNum = tempArray[1];
                  $("#id_securityCode_input").val(tempNum);   
            }
              });
        })
    })
</script>


3.jssdk 代码  (jssdk.php 源码)
<?php
class JSSDK {
  private $appId;
  private $appSecret;

  public function __construct($appId, $appSecret) {
    $this->appId = $appId;
    $this->appSecret = $appSecret;
  }

  public function getSignPackage() {
    $jsapiTicket = $this->getJsApiTicket();
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    $timestamp = time();
    $nonceStr = $this->createNonceStr();

    // 这里参数的顺序要按照 key 值 ASCII 码升序排序
    $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";

    $signature = sha1($string);

    $signPackage = array(
      "appId"     => $this->appId,
      "nonceStr"  => $nonceStr,
      "timestamp" => $timestamp,
      "url"       => $url,
      "signature" => $signature,
      "rawString" => $string
    );
    return $signPackage;
  }

  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;
  }

  private function httpGet($url) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 500);
    curl_setopt($curl, CURLOPT_URL, $url);

    $res = curl_exec($curl);
    curl_close($curl);

    return $res;
  }

  private function getJsApiTicket(){
    

      $accessToken = $this->getAccessToken();
      $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
      $res = json_decode($this->httpGet($url));
      $ticket = $res->ticket;
      return $ticket;

  }

  private function getAccessToken(){

      $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
      $res = json_decode($this->httpGet($url));
      $access_token = $res->access_token;
      return $access_token;
  }


}

分类:

技术点:

相关文章: