总结的一些微信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);
 
以上所述就是本文的全部内容,希望大家能够喜欢。
在此感谢大家的一路相陪,希望大家在新的一年里身体健康,万事如意,心想事成,财源滚滚~~~

转载于:https://www.cnblogs.com/HanJie0824/p/6260218.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值