总结的一些微信API接口

3 篇文章 0 订阅

本文给大家介绍的是个人总结的一些微信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/' ,
             imgUrl:  'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg' ,
             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);
 
以上所述就是本文的全部内容,希望大家能够喜欢。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值