|
@@ -79,6 +79,9 @@ class Wechat
|
|
|
const MENU_CREATE_URL = '/menu/create?';
|
|
|
const MENU_GET_URL = '/menu/get?';
|
|
|
const MENU_DELETE_URL = '/menu/delete?';
|
|
|
+ const MENU_ADDCONDITIONAL_URL = '/menu/addconditional?';
|
|
|
+ const MENU_DELCONDITIONAL_URL = '/menu/delconditional?';
|
|
|
+ const MENU_TRYMATCH_URL = '/menu/trymatch?';
|
|
|
const GET_TICKET_URL = '/ticket/getticket?';
|
|
|
const CALLBACKSERVER_GET_URL = '/getcallbackip?';
|
|
|
const QRCODE_CREATE_URL='/qrcode/create?';
|
|
@@ -88,6 +91,7 @@ class Wechat
|
|
|
const SHORT_URL='/shorturl?';
|
|
|
const USER_GET_URL='/user/get?';
|
|
|
const USER_INFO_URL='/user/info?';
|
|
|
+ const USERS_INFO_URL='/user/info/batchget?';
|
|
|
const USER_UPDATEREMARK_URL='/user/info/updateremark?';
|
|
|
const GROUP_GET_URL='/groups/get?';
|
|
|
const USER_GROUP_URL='/groups/getid?';
|
|
@@ -144,7 +148,8 @@ class Wechat
|
|
|
const CARD_DELETE = '/card/delete?';
|
|
|
const CARD_UPDATE = '/card/update?';
|
|
|
const CARD_GET = '/card/get?';
|
|
|
- const CARD_BATCHGET = '/card/batchget?';
|
|
|
+ const CARD_USER_GETCARDLIST = '/card/user/getcardlist?';
|
|
|
+ const CARD_BATCHGET = '/card/batchget?';
|
|
|
const CARD_MODIFY_STOCK = '/card/modifystock?';
|
|
|
const CARD_LOCATION_BATCHADD = '/card/location/batchadd?';
|
|
|
const CARD_LOCATION_BATCHGET = '/card/location/batchget?';
|
|
@@ -1310,6 +1315,37 @@ class Wechat
|
|
|
return $signPackage;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取卡券签名cardSign
|
|
|
+ * @param string $card_type 卡券的类型,不可为空,官方jssdk文档说这个值可空,但签名验证工具又必填这个值,官方文档到处是坑,
|
|
|
+ * @param string $card_id 卡券的ID,可空
|
|
|
+ * @param string $location_id 卡券的适用门店ID,可空
|
|
|
+ * @param string $timestamp 当前时间戳 (为空则自动生成)
|
|
|
+ * @param string $noncestr 随机串 (为空则自动生成)
|
|
|
+ * @param string $appid 用于多个appid时使用,可空
|
|
|
+ * @return array|bool 返回签名字串
|
|
|
+ */
|
|
|
+ public function getCardSign($card_type='',$card_id='',$code='',$location_id='',$timestamp=0, $noncestr='', $appid=''){
|
|
|
+ if (!$this->api_ticket && !$this->getJsCardTicket($appid)) return false;
|
|
|
+ if (!$timestamp)
|
|
|
+ $timestamp = time();
|
|
|
+ if (!$noncestr)
|
|
|
+ $noncestr = $this->generateNonceStr();
|
|
|
+ $arrdata = array("api_ticket" => $this->api_ticket,"app_id" => $this->appid,"card_id" => $card_id,"code" => $code,"card_type" => $card_type,"location_id" => $location_id,"timestamp" => $timestamp, "noncestr" => $noncestr );
|
|
|
+ $sign = $this->getTicketSignature($arrdata);
|
|
|
+ if (!$sign)
|
|
|
+ return false;
|
|
|
+ $signPackage = array(
|
|
|
+ "cardType" => $card_type,
|
|
|
+ "cardId" => $card_id,
|
|
|
+ "shopId" => $location_id, //location_id就是shopId
|
|
|
+ "nonceStr" => $noncestr,
|
|
|
+ "timestamp" => $timestamp,
|
|
|
+ "cardSign" => $sign
|
|
|
+ );
|
|
|
+ return $signPackage;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 微信api不支持中文转义的json结构
|
|
|
* @param array $arr
|
|
@@ -1577,6 +1613,72 @@ class Wechat
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 创建个性化菜单(认证后的订阅号可用)
|
|
|
+ * @param array $data
|
|
|
+ * @return bool
|
|
|
+ *
|
|
|
+ */
|
|
|
+ public function addconditionalMenu($data){
|
|
|
+ if (!$this->access_token && !$this->checkAuth()) return false;
|
|
|
+ $result = $this->http_post(self::API_URL_PREFIX.self::MENU_ADDCONDITIONAL_URL.'access_token='.$this->access_token,self::json_encode($data));
|
|
|
+ if ($result)
|
|
|
+ {
|
|
|
+ $json = json_decode($result,true);
|
|
|
+ if (!$json || !empty($json['errcode'])) {
|
|
|
+ $this->errCode = $json['errcode'];
|
|
|
+ $this->errMsg = $json['errmsg'];
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除个性化菜单(认证后的订阅号可用)
|
|
|
+ * @param $data {"menuid":"208379533"}
|
|
|
+ *
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ public function delconditionalMenu($data){
|
|
|
+ if (!$this->access_token && !$this->checkAuth()) return false;
|
|
|
+ $result = $this->http_post(self::API_URL_PREFIX.self::MENU_DELCONDITIONAL_URL.'access_token='.$this->access_token,self::json_encode($data));
|
|
|
+ if ($result)
|
|
|
+ {
|
|
|
+ $json = json_decode($result,true);
|
|
|
+ if (!$json || !empty($json['errcode'])) {
|
|
|
+ $this->errCode = $json['errcode'];
|
|
|
+ $this->errMsg = $json['errmsg'];
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 测试个性化菜单匹配结果(认证后的订阅号可用)
|
|
|
+ * @param $data {"user_id":"weixin"} user_id可以是粉丝的OpenID,也可以是粉丝的微信号
|
|
|
+ *
|
|
|
+ * @return bool|array('button'=>array(....s))
|
|
|
+ */
|
|
|
+ public function trymatchMenu($data){
|
|
|
+ if (!$this->access_token && !$this->checkAuth()) return false;
|
|
|
+ $result = $this->http_post(self::API_URL_PREFIX.self::MENU_TRYMATCH_URL.'access_token='.$this->access_token,self::json_encode($data));
|
|
|
+ if ($result)
|
|
|
+ {
|
|
|
+ $json = json_decode($result,true);
|
|
|
+ if (!$json || !empty($json['errcode'])) {
|
|
|
+ $this->errCode = $json['errcode'];
|
|
|
+ $this->errMsg = $json['errmsg'];
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return $json;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 上传临时素材,有效期为3天(认证后的订阅号可用)
|
|
|
* 注意:上传大文件时可能需要先调用 set_time_limit(0) 避免超时
|
|
|
* 注意:数组的键值任意,但文件名前必须加@,使用单引号以避免本地路径斜杠被转义
|
|
@@ -2209,6 +2311,27 @@ class Wechat
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 批量获取关注者详细信息
|
|
|
+ * @param array $openids user_list{{'openid:xxxxxx'},{},{}}
|
|
|
+ * @return array user_info_list{subscribe,openid,nickname,sex,city,province,country,language,headimgurl,subscribe_time,[unionid]}{}{}...
|
|
|
+ * 注意:unionid字段 只有在用户将公众号绑定到微信开放平台账号后,才会出现。建议调用前用isset()检测一下
|
|
|
+ */
|
|
|
+ public function getUsersInfo($openids){
|
|
|
+ if (!$this->access_token && !$this->checkAuth()) return false;
|
|
|
+ $result = $this->http_post(self::API_URL_PREFIX.self::USERS_INFO_URL.'access_token='.$this->access_token,json_encode($openids));
|
|
|
+ if ($result)
|
|
|
+ {
|
|
|
+ $json = json_decode($result,true);
|
|
|
+ if (isset($json['errcode'])) {
|
|
|
+ $this->errCode = $json['errcode'];
|
|
|
+ $this->errMsg = $json['errmsg'];
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return $json;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 设置用户备注名
|
|
@@ -3096,6 +3219,40 @@ class Wechat
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 获取用户已领取卡券接口
|
|
|
+ * @param string $openid
|
|
|
+ * @param string $card_id
|
|
|
+ * @return boolean|array 返回数组信息比较复杂,请参看卡券接口文档
|
|
|
+ * 成功返回结果
|
|
|
+ * {
|
|
|
+ * "errcode":0,
|
|
|
+ * "errmsg":"ok",
|
|
|
+ * "card_list": [
|
|
|
+ * {"code": "xxx1434079154", "card_id": "xxxxxxxxxx"},
|
|
|
+ * {"code": "xxx1434079155", "card_id": "xxxxxxxxxx"}
|
|
|
+ * ]
|
|
|
+ * }
|
|
|
+ */
|
|
|
+ public function getUserCardList($openid,$card_id) {
|
|
|
+ $data = array(
|
|
|
+ 'openid' => $openid,
|
|
|
+ 'card_id' => $card_id
|
|
|
+ );
|
|
|
+ if (!$this->access_token && !$this->checkAuth()) return false;
|
|
|
+ $result = $this->http_post(self::API_BASE_URL_PREFIX . self::CARD_USER_GETCARDLIST . 'access_token=' . $this->access_token, self::json_encode($data));
|
|
|
+ if ($result) {
|
|
|
+ $json = json_decode($result, true);
|
|
|
+ if (!$json || !empty($json['errcode'])) {
|
|
|
+ $this->errCode = $json['errcode'];
|
|
|
+ $this->errMsg = $json['errmsg'];
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return $json;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 获取颜色列表
|
|
|
* 获得卡券的最新颜色列表,用于创建卡券
|
|
|
* @return boolean|array 返回数组请参看 微信卡券接口文档 的json格式
|