<?php
session_start();
/*
*本例子只做演示,可参考使用,不可直接用到复制到实际代码中,需根据实际开发情况修改后方可使用。
*/
//生成签名函数
class card{
protected $appid ;
protected $secret ;
protected $card_id ;
protected $xcx ;
protected $xcxPath ;
// protected $openid ;
function __construct($appid, $secret,$card_id,$xcx,$xcxPath) {
$this->appid = $appid;
$this->secret = $secret;
$this->card_id=$card_id;
$this->xcx = $xcx;
$this->xcxPath=$xcxPath;
// $this->openid=$openid;
// print_r($appid);
// print_r('=========');
// print_r($secret); print_r('=========');
// print_r($card_id);
}
/**
* 获取用户领取卡券code
* @return mixed
* */
public function getUserCard() {
$token =$this->getAccessToken(); //这里就是之前获取的access_token
$url = "https://api.weixin.qq.com/card/user/getcardlist?access_token=" . $token; //调用接口凭证
$data ='{"openid": "oQWjG1K7Lt2yHKLSNroDnvfWZWqc", "card_id": "'.$this->card_id.'"}';
print_r($data);
$dataRes = $this->request_post($url, $data);
$res = json_decode($dataRes,true);
print_r($res) ;
}
public function getAccessToken() {
$appid = $this->appid;//自己的appid
$appsecret =$this->secret;//自己的appsecret
/*以上两个参数,是在微信公众号的基本配置里面查看
注意:这个accesstoken一定要缓存起来,因为它有时效性(7200秒)
*/
if(!empty($_COOKIE)){
$access_token=$_COOKIE["access_token"];
}
else{
$access_token=null;
}
if(empty($access_token)){
$timeout = 5;
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $appsecret;
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
//获取access_token和openid,转换为数组
$access = json_decode(curl_exec($curl), true);
setcookie("access_token",$access['access_token'], time()+7200);
$access_token=$access['access_token'];
// print_r($access);
}
return $access_token;
}
// * 获取卡券ticket
// * @return mixed|string
// */
public function getCardApiTicket() {
if(!empty($_COOKIE)){
$api_ticket=$_COOKIE["ticket"];
}
else{
$api_ticket=null;
}
if(empty($api_ticket)){
$token = $this->getAccessToken(); //上一步得到的access_token
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" . $token . "&type=wx_card";
$api_ticket = $this->request_Get($url);
$res = json_decode($api_ticket, true);
setcookie("ticket",$res['ticket'], time()+7200);
$api_ticket=$res['ticket'];
}
// print_r($res);
return $api_ticket;
}
/**
* 获取卡券签名
* @param $timestamp int 时间戳
* @param $api_ticket string 卡券ticket
* @param $noncestr string 随机字符串,由开发者设置传入,加强安全性(若不填写可能被重放请求)。随机字符串,不长于 32 位
* @param $card_id string 卡券ID
* @param $openid string 用户的微信小程序openid
* * @param $code string 卡的编号
* @return array
*/
public function get_sign(){
$arr = array();
$nonceStr=$this->generateNonceStr();
$apiTicket=$this->getCardApiTicket();
$timestamp=(string)time();
$arr['timestamp'] = $timestamp;
$arr['nonce_str'] = $nonceStr;
$arr['ticket'] = $apiTicket;
$arr['card_id'] = $this->card_id;
asort($arr, SORT_STRING); // 排序
$key = implode($arr); // 加密
$signature = sha1($key);
return array('timestamp'=>$timestamp,'nonce_str'=>$nonceStr,'sign'=>$signature,'card_id'=>$this->card_id);
}
/**
* 密码字符集
* @param int $length
* @return string
*/
public function generateNonceStr($length=16){
// 密码字符集,可任意添加你需要的字符
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$str = "";
for($i = 0; $i < $length; $i++)
{
$str .= $chars[mt_rand(0, strlen($chars) - 1)];
}
return $str;
}
/**
* 返回提示信息
* @param $code string 错误码 4001 空值 4002 格式不正确 4003 长度 4004 提示 200正确放回 ,0失败
* @param $msg string 错误描述
* @param $data string 返回值
* @return array
*/
public function resMap($code, $msg, $data)
{
$map = array();
$map['errMsg'] = $msg;
$map['data'] = $data;
$map['errCode'] = $code;
return json($map);
}
/***
* GET方法
* @param $url
* @return mixed
*/
public function request_Get($url){
$curl = curl_init();
$timeout = 5;
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
$tmpInfo = curl_exec($curl); //返回api的json对象
//关闭URL请求
curl_close($curl);
return $tmpInfo; //返回json对象
}
/**
* 发送post请求
* @param string $url
* @param string $param
* @return bool|mixed
*/
public function request_post($url = '', $param = '')
{
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
$ch = curl_init(); //初始化curl
curl_setopt($ch, CURLOPT_URL, $postUrl); //抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0); //设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_POST, 1); //post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($ch); //运行curl
curl_close($ch);
return $data;
}
}