總結的一些微信API接口


本文給大家介紹的是個人總結的一些微信API接口,包括微信支付、微信紅包、微信卡券、微信小店等,十分的全面,有需要的小伙伴可以參考下。

1. [代碼]index.php

<?php
include_once 'lib.inc.php' ;
  
$wcObj = new WeChat( "YOUKUIYUAN" );
$wcObj ->wcValid();

2. [代碼]微信入口類    

<?php
/**
  * Description of wechat
  *
  * @author Administrator
  */
class WeChat extends WxApi{
   public $token = "" ;
   //put your code here
   public function __construct( $token = "" ) {
     parent::__construct();
     $this ->token = $token ;
   }
  
   public function wcCheckSignature(){
     try {
       if ( empty ( $this ->token)) {
         throw new Exception( 'TOKEN is not defined!' );
       }
        
       $signature = $_GET [ "signature" ];
       $timestamp = $_GET [ "timestamp" ];
       $nonce = $_GET [ "nonce" ];
          
       $token = $this ->token;
       $tmpArr = array ( $token , $timestamp , $nonce );
       // use SORT_STRING rule
       sort( $tmpArr , SORT_STRING);
       $tmpStr = implode( $tmpArr );
       $tmpStr = sha1( $tmpStr );
  
       if ( $tmpStr == $signature ){
           return true;
       } else {
           return false;
       }
     }
     catch (Exception $e ) {
       echo 'Message: ' . $e ->getMessage();
     }
   }
    
   public function wcValid(){
     $echoStr = isset( $_GET [ "echostr" ]) && ! empty ( $_GET [ "echostr" ]) ? addslashes ( $_GET [ "echostr" ]) : NULL;
     if ( is_null ( $echoStr )){
       $this ->wcMsg();
     }
     else {
       //valid signature , option
       if ( $this ->wcCheckSignature()){
         echo $echoStr ;
         exit ;
       }
       else {
         exit ();
       }
     }
   }
    
   public function wcMsg(){
     //get post data, May be due to the different environments
     $postStr = isset( $GLOBALS [ "HTTP_RAW_POST_DATA" ]) && ! empty ( $GLOBALS [ "HTTP_RAW_POST_DATA" ]) ? $GLOBALS [ "HTTP_RAW_POST_DATA" ] : "" ;
     if (! empty ( $postStr )){
       libxml_disable_entity_loader(true);
       $postObj = simplexml_load_string( $postStr , 'SimpleXMLElement' , LIBXML_NOCDATA);
       $this ->zcLog(TRUE, $postObj );
        
       $fromUsername = $postObj ->FromUserName;
       $toUsername = $postObj ->ToUserName;
       $MsgType = $postObj ->MsgType;
        
       if ( $MsgType == 'event' ){ //執行事件相應
         $Event = $postObj ->Event;
         switch ( $Event ) {
           case 'subscribe' : //關注
             break ;
           case 'unsubscribe' : //取消關注
             break ;
           case 'SCAN' : //掃描
             break ;
           case 'LOCATION' : //地址
             break ;
           case 'CLICK' : //點擊時間
             break ;
           case 'VIEW' : //跳轉
             break ;
           case 'card_pass_check' : //卡券審核通過
             break ;
           case 'card_not_pass_check' : //卡券審核失敗
             break ;
           case 'user_get_card' : //用戶領取卡券
             break ;
           case 'user_del_card' : //用戶刪除卡券
             break ;
           case 'user_view_card' : //用戶瀏覽會員卡
             break ;
           case 'user_consume_card' : //用戶核銷卡券
             break ;
           case 'merchant_order' : //微小店用戶下單付款
             break ;
           default :
             break ;
         }
       }
       else {
         switch ( $MsgType ) {
           case 'text' : //文本格式
             break ;
           case 'image' : //圖片格式
             break ;
           case 'voice' : //聲音
             break ;
           case 'video' : //視頻
             break ;
           case 'shortvideo' : //小視頻
             break ;
           case 'location' : //上傳地理位置
             break ;
           case 'link' : //鏈接相應
             break ;
           default :
             break ;
         }       
       }
        
       ////////////////////////////////////////////////////////////////////
       $keyword = trim( $postObj ->Content);
       $time = time();
       $textTpl = "<xml>
               <ToUserName><![CDATA[%s]]></ToUserName>
               <FromUserName><![CDATA[%s]]></FromUserName>
               <CreateTime>%s</CreateTime>
               <MsgType><![CDATA[%s]]></MsgType>
               <Content><![CDATA[%s]]></Content>
               <FuncFlag>0</FuncFlag>
             </xml>";      
       if (! empty ( $keyword )){
         $msgType = "text" ;
         $contentStr = "Welcome to wechat world!" ;
         $resultStr = sprintf( $textTpl , $fromUsername , $toUsername , $time , $msgType , $contentStr );
         echo $resultStr ;
       }
       else {
         echo "Input something..." ;
       }
       ////////////////////////////////////////////////////////////////////
     }
     else {
       echo "暫時沒有任何信息!" ;
       exit ;
     }
   }
    
   //日志LOG
   public function zcLog( $errcode , $errmsg ){
     $this ->returnAy = array ();
     $this ->returnAy[ 'errcode' ] = $errcode ;
     $this ->returnAy[ 'errmsg' ] = $errmsg ;
     $this ->returnAy[ 'errtime' ] = date ( "Y-m-d H:i:s" ,time());
     $logfile = fopen ( "logfile_" . date ( "Ymd" ,time()). ".txt" , "a+" );
     $txt = json_encode( $this ->returnAy). "\n" ;
     fwrite( $logfile , $txt );
     fclose( $logfile );
     //return $this->returnAy;
   }
    
}
3. [代碼]微信操作類 - 更新了自定義菜單部分
<?php
   /********************************************************
    *   @author Kyler You <QQ:2444756311>
    *   @version 2.0.1
    *   @uses $wxApi = new WxApi();
    *   @package 微信API接口 陸續會繼續進行更新
    ********************************************************/
  
   class WxApi {
     //const appId     = "";
     //const appSecret   = "";
     const appId     = "" ;
     const appSecret   = "" ;
     //const mchid     = ""; //商戶號
     //const privatekey  = ""; //私鑰
     public $parameters = array ();
  
     public function __construct(){
  
     }
  
     /****************************************************
      * 微信提交API方法,返回微信指定JSON
      ****************************************************/
  
     public function wxHttpsRequest( $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, 1);
         $output = curl_exec( $curl );
         curl_close( $curl );
         return $output ;
     }
  
     /****************************************************
      * 微信帶證書提交數據 - 微信紅包使用
      ****************************************************/
  
     public function wxHttpsRequestPem( $url , $vars , $second =30, $aHeader = array ()){
         $ch = curl_init();
         //超時時間
         curl_setopt( $ch ,CURLOPT_TIMEOUT, $second );
         curl_setopt( $ch ,CURLOPT_RETURNTRANSFER, 1);
         //這里設置代理,如果有的話
         //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');
         //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
         curl_setopt( $ch ,CURLOPT_URL, $url );
         curl_setopt( $ch ,CURLOPT_SSL_VERIFYPEER,false);
         curl_setopt( $ch ,CURLOPT_SSL_VERIFYHOST,false);
  
         //以下兩種方式需選擇一種
  
         //第一種方法,cert 與 key 分別屬於兩個.pem文件
         //默認格式為PEM,可以注釋
         curl_setopt( $ch ,CURLOPT_SSLCERTTYPE, 'PEM' );
         curl_setopt( $ch ,CURLOPT_SSLCERT, getcwd (). '/apiclient_cert.pem' );
         //默認格式為PEM,可以注釋
         curl_setopt( $ch ,CURLOPT_SSLKEYTYPE, 'PEM' );
         curl_setopt( $ch ,CURLOPT_SSLKEY, getcwd (). '/apiclient_key.pem' );
  
         curl_setopt( $ch ,CURLOPT_CAINFO, 'PEM' );
         curl_setopt( $ch ,CURLOPT_CAINFO, getcwd (). '/rootca.pem' );
  
         //第二種方式,兩個文件合成一個.pem文件
         //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem');
  
         if ( count ( $aHeader ) >= 1 ){
             curl_setopt( $ch , CURLOPT_HTTPHEADER, $aHeader );
         }
  
         curl_setopt( $ch ,CURLOPT_POST, 1);
         curl_setopt( $ch ,CURLOPT_POSTFIELDS, $vars );
         $data = curl_exec( $ch );
         if ( $data ){
             curl_close( $ch );
             return $data ;
         }
         else {
             $error = curl_errno( $ch );
             echo "call faild, errorCode:$error\n" ;
             curl_close( $ch );
             return false;
         }
     }
  
     /****************************************************
      * 微信獲取AccessToken 返回指定微信公眾號的at信息
      ****************************************************/
  
     public function wxAccessToken( $appId = NULL , $appSecret = NULL){
         $appId     = is_null ( $appId ) ? self::appId : $appId ;
         $appSecret   = is_null ( $appSecret ) ? self::appSecret : $appSecret ;
          
         $data = json_decode( file_get_contents ( "access_token.json" ));
         if ( $data ->expire_time < time()) {
           //echo $appId,$appSecret;
           $url      = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appId . "&secret=" . $appSecret ;
           $result     = $this ->wxHttpsRequest( $url );
           //print_r($result);
           $jsoninfo    = json_decode( $result , true);
           $access_token  = $jsoninfo [ "access_token" ];
           if ( $access_token ) {
             $data ->expire_time = time() + 7000;
             $data ->access_token = $access_token ;
             $fp = fopen ( "access_token.json" , "w" );
             fwrite( $fp , json_encode( $data ));
             fclose( $fp );
           }
         }
         else {
           $access_token = $data ->access_token;
         }
         return $access_token ;
     }
  
     /****************************************************
      * 微信獲取AccessToken 返回指定微信公眾號的at信息
      ****************************************************/
  
     public function wxJsApiTicket( $appId = NULL , $appSecret = NULL){
         $appId     = is_null ( $appId ) ? self::appId : $appId ;
         $appSecret   = is_null ( $appSecret ) ? self::appSecret : $appSecret ;
          
         $data = json_decode( file_get_contents ( "jsapi_ticket.json" ));
         if ( $data ->expire_time < time()) {       
           $url    = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=" . $this ->wxAccessToken();
           $result     = $this ->wxHttpsRequest( $url );
           $jsoninfo    = json_decode( $result , true);
           $ticket = $jsoninfo [ 'ticket' ];
           if ( $ticket ) {
             $data ->expire_time = time() + 7000;
             $data ->jsapi_ticket = $ticket ;
             $fp = fopen ( "jsapi_ticket.json" , "w" );
             fwrite( $fp , json_encode( $data ));
             fclose( $fp );
           }
         }
         else {
           $ticket = $data ->jsapi_ticket;
         }
         return $ticket ;
     }
      
     /****************************************************
      * 微信通過OPENID獲取用戶信息,返回數組
      ****************************************************/
  
     public function wxGetUser( $openId ){
       $wxAccessToken = $this ->wxAccessToken();
       $url      = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" . $wxAccessToken . "&openid=" . $openId . "&lang=zh_CN" ;
       $result     = $this ->wxHttpsRequest( $url );
       $jsoninfo    = json_decode( $result , true);
       return $jsoninfo ;
     }   
  
     /****************************************************
      * 微信生成二維碼ticket
      ****************************************************/
  
     public function wxQrCodeTicket( $jsonData ){
       $wxAccessToken = $this ->wxAccessToken();
       $url    = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" . $wxAccessToken ;
       $result     = $this ->wxHttpsRequest( $url , $jsonData );
       return $result ;
     }
      
     /****************************************************
      * 微信通過ticket生成二維碼
      ****************************************************/
     public function wxQrCode( $ticket ){
       $url  = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" . urlencode( $ticket );
       return $url ;
     }
  
     /****************************************************
      *   發送自定義的模板消息
      ****************************************************/
  
     public function wxSetSend( $touser , $template_id , $url , $data , $topcolor = '#7B68EE' ){
         $template = array (
             'touser' => $touser ,
             'template_id' => $template_id ,
             'url' => $url ,
             'topcolor' => $topcolor ,
             'data' => $data
         );
         $jsonData = json_encode( $template );
         $result = $this ->wxSendTemplate( $jsonData );
         return $result ;
     }
  
     /****************************************************
      * 微信設置OAUTH跳轉URL,返回字符串信息 - SCOPE = snsapi_base //驗證時不返回確認頁面,只能獲取OPENID
      ****************************************************/
  
     public function wxOauthBase( $redirectUrl , $state = "" , $appId = NULL){
         $appId     = is_null ( $appId ) ? self::appId : $appId ;
         $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $appId . "&redirect_uri=" . $redirectUrl . "&response_type=code&scope=snsapi_base&state=" . $state . "#wechat_redirect" ;
         return $url ;
     }
  
     /****************************************************
      * 微信設置OAUTH跳轉URL,返回字符串信息 - SCOPE = snsapi_userinfo //獲取用戶完整信息
      ****************************************************/
  
     public function wxOauthUserinfo( $redirectUrl , $state = "" , $appId = NULL){
         $appId     = is_null ( $appId ) ? self::appId : $appId ;
         $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $appId . "&redirect_uri=" . $redirectUrl . "&response_type=code&scope=snsapi_userinfo&state=" . $state . "#wechat_redirect" ;
         return $url ;
     }
  
     /****************************************************
      * 微信OAUTH跳轉指定URL
      ****************************************************/
  
     public function wxHeader( $url ){
         header( "location:" . $url );
     }
  
     /****************************************************
      * 微信通過OAUTH返回頁面中獲取AT信息
      ****************************************************/
  
     public function wxOauthAccessToken( $code , $appId = NULL , $appSecret = NULL){
         $appId     = is_null ( $appId ) ? self::appId : $appId ;
         $appSecret   = is_null ( $appSecret ) ? self::appSecret : $appSecret ;
         $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appId . "&secret=" . $appSecret . "&code=" . $code . "&grant_type=authorization_code" ;
         $result     = $this ->wxHttpsRequest( $url );
         //print_r($result);
         $jsoninfo    = json_decode( $result , true);
         //$access_token   = $jsoninfo["access_token"];
         return $jsoninfo ;     
     }
  
     /****************************************************
      * 微信通過OAUTH的Access_Token的信息獲取當前用戶信息 // 只執行在snsapi_userinfo模式運行
      ****************************************************/
  
     public function wxOauthUser( $OauthAT , $openId ){
         $url      = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $OauthAT . "&openid=" . $openId . "&lang=zh_CN" ;
         $result     = $this ->wxHttpsRequest( $url );
         $jsoninfo    = json_decode( $result , true);
         return $jsoninfo ;     
     }
  
     /****************************************************
      * 創建自定義菜單
      ****************************************************/
  
     public function wxMenuCreate( $jsonData ){
       $wxAccessToken = $this ->wxAccessToken();
       $url      = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $wxAccessToken ;
       $result     = $this ->wxHttpsRequest( $url , $jsonData );
       $jsoninfo    = json_decode( $result , true);
       return $jsoninfo ;     
     }
  
     /****************************************************
      * 獲取自定義菜單
      ****************************************************/
  
     public function wxMenuGet(){
       $wxAccessToken = $this ->wxAccessToken();
       $url      = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" . $wxAccessToken ;
       $result     = $this ->wxHttpsRequest( $url );
       $jsoninfo    = json_decode( $result , true);
       return $jsoninfo ;
     }
  
     /****************************************************
      * 刪除自定義菜單
      ****************************************************/
  
     public function wxMenuDelete(){
       $wxAccessToken = $this ->wxAccessToken();
       $url      = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" . $wxAccessToken ;
       $result     = $this ->wxHttpsRequest( $url );
       $jsoninfo    = json_decode( $result , true);
       return $jsoninfo ;
     }
  
     /****************************************************
      * 獲取第三方自定義菜單
      ****************************************************/
  
     public function wxMenuGetInfo(){
       $wxAccessToken = $this ->wxAccessToken();
       $url      = "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=" . $wxAccessToken ;
       $result     = $this ->wxHttpsRequest( $url );
       $jsoninfo    = json_decode( $result , true);
       return $jsoninfo ;
     }
          
     /*****************************************************
      *   生成隨機字符串 - 最長為32位字符串
      *****************************************************/
     public function wxNonceStr( $length = 16, $type = FALSE) {
       $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ;
       $str = "" ;
       for ( $i = 0; $i < $length ; $i ++) {
        $str .= substr ( $chars , mt_rand(0, strlen ( $chars ) - 1), 1);
       }
       if ( $type == TRUE){
         return strtoupper (md5(time() . $str ));
       }
       else {
         return $str ;
       }
     }
      
     /*******************************************************
      *   微信商戶訂單號 - 最長28位字符串
      *******************************************************/
      
     public function wxMchBillno( $mchid = NULL) {
       if ( is_null ( $mchid )){
         if (self::mchid == "" || is_null (self::mchid)){
           $mchid = time();
         }
         else {
           $mchid = self::mchid;
         }
       }
       else {
         $mchid = substr ( addslashes ( $mchid ),0,10);
       }
       return date ( "Ymd" ,time()).time(). $mchid ;
     }
      
     /*******************************************************
      *   微信格式化數組變成參數格式 - 支持url加密
      *******************************************************/  
      
     public function wxSetParam( $parameters ){
       if ( is_array ( $parameters ) && ! empty ( $parameters )){
         $this ->parameters = $parameters ;
         return $this ->parameters;
       }
       else {
         return array ();
       }
     }
      
     /*******************************************************
      *   微信格式化數組變成參數格式 - 支持url加密
      *******************************************************/
      
   public function wxFormatArray( $parameters = NULL, $urlencode = FALSE){
       if ( is_null ( $parameters )){
         $parameters = $this ->parameters;
       }
       $restr = "" ; //初始化空
       ksort( $parameters ); //排序參數
       foreach ( $parameters as $k => $v ){ //循環定制參數
         if (null != $v && "null" != $v && "sign" != $k ) {
           if ( $urlencode ){ //如果參數需要增加URL加密就增加,不需要則不需要
             $v = urlencode( $v );
           }
           $restr .= $k . "=" . $v . "&" ; //返回完整字符串
         }
       }
       if ( strlen ( $restr ) > 0) { //如果存在數據則將最后“&”刪除
         $restr = substr ( $restr , 0, strlen ( $restr )-1);
       }
       return $restr ; //返回字符串
   }
      
     /*******************************************************
      *   微信MD5簽名生成器 - 需要將參數數組轉化成為字符串[wxFormatArray方法]
      *******************************************************/
     public function wxMd5Sign( $content , $privatekey ){
     try {
         if ( is_null ( $privatekey )) {
           throw new Exception( "財付通簽名key不能為空!" );
         }
         if ( is_null ( $content )) {
           throw new Exception( "財付通簽名內容不能為空" );
         }
         $signStr = $content . "&key=" . $privatekey ;
         return strtoupper (md5( $signStr ));
       }
       catch (Exception $e )
       {
         die ( $e ->getMessage());
       }
     }
      
     /*******************************************************
      *   微信Sha1簽名生成器 - 需要將參數數組轉化成為字符串[wxFormatArray方法]
      *******************************************************/
     public function wxSha1Sign( $content ){
       try {
         if ( is_null ( $content )) {
           throw new Exception( "簽名內容不能為空" );
         }
         //$signStr = $content;
         return sha1( $content );
       }
       catch (Exception $e )
       {
         die ( $e ->getMessage());
       }
     }
      
     /*******************************************************
      *   微信jsApi整合方法 - 通過調用此方法獲得jsapi數據
      *******************************************************/   
     public function wxJsapiPackage(){
       $jsapi_ticket = $this ->wxJsApiTicket();
        
       // 注意 URL 一定要動態獲取,不能 hardcode.
       $protocol = (! empty ( $_SERVER [ 'HTTPS' ]) && $_SERVER [ 'HTTPS' ] !== 'off' || $_SERVER [ 'SERVER_PORT' ] == 443) ? "https://" : "http://" ;
       $url = $protocol . $_SERVER [ "HTTP_HOST" ]. $_SERVER [ "REQUEST_URI" ];
        
       $timestamp = time();
       $nonceStr = $this ->wxNonceStr();
        
       $signPackage = array (
        "jsapi_ticket" => $jsapi_ticket ,
        "nonceStr" => $nonceStr ,
        "timestamp" => $timestamp ,
        "url"    => $url
       );
        
       // 這里參數的順序要按照 key 值 ASCII 碼升序排序
       $rawString = "jsapi_ticket=$jsapi_ticket&noncestr=$nonceStr×tamp=$timestamp&url=$url" ;
        
       //$rawString = $this->wxFormatArray($signPackage);
       $signature = $this ->wxSha1Sign( $rawString );
        
       $signPackage [ 'signature' ] = $signature ;
       $signPackage [ 'rawString' ] = $rawString ;
       $signPackage [ 'appId' ] = self::appId;
        
       return $signPackage ;
     }
      
      
     /*******************************************************
      *   將數組解析XML - 微信紅包接口
      *******************************************************/
     public function wxArrayToXml( $parameters = NULL){
       if ( is_null ( $parameters )){
         $parameters = $this ->parameters;
       }
        
       if (! is_array ( $parameters ) || empty ( $parameters )){
         die ( "參數不為數組無法解析" );
       }
        
       $xml = "<xml>" ;
       foreach ( $arr as $key => $val )
       {
         if ( is_numeric ( $val ))
         {
           $xml .= "<" . $key . ">" . $val . "</" . $key . ">" ;
         }
         else
           $xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">" ;
       }
       $xml .= "</xml>" ;
       return $xml ;
     }
      
     /*******************************************************
      *   微信卡券:上傳LOGO - 需要改寫動態功能
      *******************************************************/
     public function wxCardUpdateImg() {
       $wxAccessToken = $this ->wxAccessToken();
       //$data['access_token'] = $wxAccessToken;
       $data [ 'buffer' ]   = '@D:\\workspace\\htdocs\\yky_test\\logo.jpg' ;
       $url      = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=" . $wxAccessToken ;
       $result     = $this ->wxHttpsRequest( $url , $data );
       $jsoninfo    = json_decode( $result , true);
       return $jsoninfo ;
     }
      
     /*******************************************************
      *   微信卡券:獲取顏色
      *******************************************************/
     public function wxCardColor(){
       $wxAccessToken = $this ->wxAccessToken();
       $url        = "https://api.weixin.qq.com/card/getcolors?access_token=" . $wxAccessToken ;
       $result     = $this ->wxHttpsRequest( $url );
       $jsoninfo    = json_decode( $result , true);
       return $jsoninfo ;
     }
      
     /*******************************************************
      *   微信卡券:創建卡券
      *******************************************************/
     public function wxCardCreated( $jsonData ) {
       $wxAccessToken = $this ->wxAccessToken();
       $url      = "https://api.weixin.qq.com/card/create?access_token=" . $wxAccessToken ;
       $result     = $this ->wxHttpsRequest( $url , $jsonData );
       $jsoninfo    = json_decode( $result , true);
       return $jsoninfo ;
     }
      
     /*******************************************************
      *   微信卡券:JSAPI 卡券Package - 基礎參數沒有附帶任何值 - 再生產環境中需要根據實際情況進行修改
      *******************************************************/  
     public function wxCardPackage( $cardId ){
       $timestamp = time();
       $api_ticket = $this ->wxJsApiTicket();
       $cardId = $cardId ;
       $arrays = array ( $api_ticket , $timestamp , $cardId );
       sort( $arrays );
       $string = sha1(implode( "" , $arrays ));
  
       $resultArray [ 'card_id' ] = $cardId ;
       $resultArray [ 'card_ext' ] = array ();
       $resultArray [ 'card_ext' ][ 'openid' ] = 'oOmn4s9MiwqHSNNvPn0dBtU23toA' ;
       $resultArray [ 'card_ext' ][ 'timestamp' ] = $timestamp ;
       $resultArray [ 'card_ext' ][ 'signature' ] = $string ;
  
       return $resultArray ;
     }
      
      
   }
4. [代碼]微信JSAPI 
<?php
   require_once 'lib.inc.php' ;
   $wx = new WxApi();
   //通過網頁獲取openid
   //if(!isset($_GET['code'])){
   //  header("location:https://open.weixin.qq.com/connect/oauth2/authorize?appid=".WxApi::appId."&redirect_uri=http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
   //}
   //else{
   //  $CODE = $_GET['code'];
   //  $Info = $wx->wxOauthAccessToken($CODE);
     //print_r($Info);
   //  $openId = $Info['openid']; 
   //}
   ////////////////////////////////////////////
  
   $signPackage = $wx ->wxJsapiPackage();
   //print_r($signPackage);
   $kqInfo = $wx ->wxCardPackage( "" );
   $listInfo = $wx ->wxCardListPackage();
?>
<html>
   <head>
     <title>JSAPI接口測試</title>
     <meta charset= "UTF-8" >
     <meta name= "viewport" content= "width=device-width, initial-scale=1.0" >
      
     <script src= "http://code.jquery.com/jquery-1.11.2.min.js" ></script>
     <script src= "http://res.wx.qq.com/open/js/jweixin-1.0.0.js" ></script>
   </head>
   <body>
     <div>
       <input type= "button" id= "batchAddCard" name= "batchAddCard" value= "添加卡券" /><br />
       <input type= "button" id= "openCard" name= "openCard" value= "拉起卡券庫" /><br />
       <input type= "button" id= "ShareTimeLine" name= "ShareTimeLine" value= "分享朋友圈" /><br />
       <div id= "showInfo" >
        
       </div>
     </div>
      
     <script>
       wx.config({
        debug: false,
        appId: '<?php echo $signPackage["appId"];?>' ,
        timestamp: <?php echo $signPackage [ "timestamp" ];?>,
        nonceStr: '<?php echo $signPackage["nonceStr"];?>' ,
        signature: '<?php echo $signPackage["signature"];?>' ,
        jsApiList: [
         // 所有要調用的 API 都要加到這個列表中
         'onMenuShareTimeline' ,
          'onMenuShareAppMessage' ,
          'addCard' ,
          'openCard'
        ]
       });
        
       wx.ready( function () {
         // 在這里調用 API
         wx.onMenuShareAppMessage({
           title: '互聯網之子' ,
           desc: '在長大的過程中,我才慢慢發現,我身邊的所有事,別人跟我說的所有事,那些所謂本來如此,注定如此的事,它們其實沒有非得如此,事情是可以改變的。更重要的是,有些事既然錯了,那就該做出改變。' ,
           link: 'http://movie.douban.com/subject/25785114/' ,
           trigger: function (res) {
             // 不要嘗試在trigger中使用ajax異步請求修改本次分享的內容,因為客戶端分享操作是一個同步操作,這時候使用ajax的回包會還沒有返回
             alert( '用戶點擊發送給朋友' );
           },
           success: function (res) {
             alert( '已分享' );
           },
           cancel: function (res) {
             alert( '已取消' );
           },
           fail: function (res) {
             alert(JSON.stringify(res));
           }
         });
          
       document.querySelector( '#ShareTimeLine' ).onclick = function () {
         wx.onMenuShareTimeline({
             title: '互聯網之子' ,
             link: 'http://movie.douban.com/subject/25785114/' ,
             trigger: function (res) {
                 // 不要嘗試在trigger中使用ajax異步請求修改本次分享的內容,因為客戶端分享操作是一個同步操作,這時候使用ajax的回包會還沒有返回
                 alert( '用戶點擊分享到朋友圈' );
             },
             success: function (res) {
                 alert( '已分享' );
             },
             cancel: function (res) {
                 alert( '已取消' );
             },
             fail: function (res) {
                 alert(JSON.stringify(res));
             }
         });
       }; 
        
        document.querySelector( '#batchAddCard' ).onclick = function () {
         wx.addCard({
          cardList: [
           {
            cardId: 'p7G0Cj_1HGF2nijO4sTlVTzawFhI' ,
            cardExt: '{"timestamp":"<?php echo $kqInfo[' cardExt '][' timestamp '];?>", "signature":"<?php echo $kqInfo[' cardExt '][' signature '];?>"}'
           }
          ],
          success: function (res) {
           var cardList = res.cardList; // 添加的卡券列表信息
           alert(cardList);
          },
         cancel: function (res) {
             alert( '已取消' );
         },
         fail: function (res) {
             alert(JSON.stringify(res));
         }
         });
        };
         
        var shareData = {
         title: '微信JS-SDK Demo' ,
         desc: '微信JS-SDK,幫助第三方為用戶提供更優質的移動web服務' ,
         link: 'http://demo.open.weixin.qq.com/jssdk/' ,
        };
         
        wx.onMenuShareAppMessage(shareData);
         
        wx.onMenuShareTimeline(shareData);
       });
  
       var readyFunc = function onBridgeReady() {
         // 綁定關注事件
         document.querySelector( '#openCard' ).addEventListener( 'click' ,
           function (e) {
             WeixinJSBridge.invoke( 'chooseCard' , {
               "app_id" : "<?php echo $listInfo['app_id']?>" ,
               "location_id " : '' ,
               "sign_type" : "SHA1" ,
               "card_sign" : "<?php echo $listInfo['card_sign']?>" ,
               "card_id" : "<?php echo $listInfo['card_id']?>" ,
               "card_type" : "<?php echo $listInfo['card_type']?>" ,
               "time_stamp" : "<?php echo $listInfo['time_stamp']?>" ,
               "nonce_str" : "<?php echo $listInfo['nonce_str']?>"
             },
           function (res) {
             alert(res.err_msg + res.choose_card_info);
             $( "#showInfo" ). empty ().append(res.err_msg + res.choose_card_info);
           });
         });
       }
        
       if (typeof WeixinJSBridge === "undefined" ) {
         document.addEventListener( 'WeixinJSBridgeReady' , readyFunc, false);
       } else {
         readyFunc();
       }
  
      </script>
   </body>
</html>
5. [代碼]創建卡券 
$kqinfo = array ( "card" => array ());
$kqinfo [ 'card' ][ 'card_type' ] = 'GENERAL_COUPON' ;
$kqinfo [ 'card' ][ 'general_coupon' ] = array ( 'base_info' => array (), 'default_detail' => array ());
$kqinfo [ 'card' ][ 'general_coupon' ][ 'base_info' ][ 'logo_url' ] = 'URL' ;
$kqinfo [ 'card' ][ 'general_coupon' ][ 'base_info' ][ 'code_type' ] = 'CODE_TYPE_QRCODE' ;
$kqinfo [ 'card' ][ 'general_coupon' ][ 'base_info' ][ 'brand_name' ] = '' ;
$kqinfo [ 'card' ][ 'general_coupon' ][ 'base_info' ][ 'title' ] = '測試卡券' ;
$kqinfo [ 'card' ][ 'general_coupon' ][ 'base_info' ][ 'color' ] = 'Color030' ;
$kqinfo [ 'card' ][ 'general_coupon' ][ 'base_info' ][ 'notice' ] = '測試測試測試' ;
$kqinfo [ 'card' ][ 'general_coupon' ][ 'base_info' ][ 'description' ] = '這是一張優惠券' ;
$kqinfo [ 'card' ][ 'general_coupon' ][ 'base_info' ][ 'date_info' ][ 'type' ] = 1;
$kqinfo [ 'card' ][ 'general_coupon' ][ 'base_info' ][ 'date_info' ][ 'begin_timestamp' ] = time();
$kqinfo [ 'card' ][ 'general_coupon' ][ 'base_info' ][ 'date_info' ][ 'end_timestamp' ] = time() + 100 * 24 * 3600;
$kqinfo [ 'card' ][ 'general_coupon' ][ 'base_info' ][ 'sku' ][ 'quantity' ] = 100000;
$kqinfo [ 'card' ][ 'general_coupon' ][ 'default_detail' ] = '測試數據\n測試數據\n測試數據' ;
  
//var_dump($kqinfo);
//$kqinfo = json_encode($kqinfo);
$kqinfo = C::enJson( $kqinfo );
  
//print_r( $kqinfo);
//$resultData = $wx->wxCardCreated($kqinfo);
 
以上所述就是本文的全部內容,希望大家能夠喜歡。
在此感謝大家的一路相陪,希望大家在新的一年里身體健康,萬事如意,心想事成,財源滾滾~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM