微信卡券接口调用需完成三步:一、获取并缓存2小时有效期的access_token,建议用Redis存储并校验过期时间;二、按字典序拼接card_id、timestamp、nonce_str、card_api_ticket后SHA1生成sign;三、POST JSON至指定URL创建卡券,注意字段类型与签名正确性,框架中应封装为服务类统一管理。

微信卡券接口在 PHP 框架中调用,核心是完成三件事:获取有效 access_token、构造符合微信签名规则的请求参数、使用 HTTPS 发起 POST 请求。不依赖 SDK 也能实现,但需严格遵循微信签名逻辑和凭证时效管理。
一、获取并缓存 access_token
access_token 是调用微信所有服务接口的必传凭证,有效期 2 小时,需自行缓存避免频繁刷新。建议用文件或 Redis 存储,并记录过期时间戳。
- 调用地址:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
- 成功响应示例:{"access_token":"xxx","expires_in":7200}
- PHP 中可用 file_get_contents() 或 cURL 获取;推荐 cURL,便于处理超时与错误码
- 缓存时建议同时保存 access_token 和 expires_at(当前时间 + 7200),每次调用前先校验是否过期
二、生成卡券 API 签名(sign)
创建卡券、投放卡券等操作需携带签名字段 sign,由卡券 API 的 secret(非公众号 AppSecret)、卡券 ID、时间戳、随机字符串四者按字典序拼接后 SHA1 加密生成。
- 所需参数:卡券 card_id、timestamp(秒级时间戳)、nonce_str(32位以内随机字符串)、card_api_ticket(需提前通过 JS-SDK 接口获取,注意不是 access_token)
- 拼接规则:card_id=xxx&nonce_str=yyy×tamp=zzz&card_api_ticket=aaa(key=value 形式,按 key 字典升序排列)
- PHP 示例:sha1($stringToSign) 即为最终 sign 值
三、调用卡券创建接口(以会员卡为例)
创建会员卡需 POST JSON 数据到 https://api.weixin.qq.com/card/create?access_token=ACCESS_TOKEN,body 内容必须严格符合微信文档结构。
立即学习“PHP免费学习笔记(深入)”;
- JSON 中 card 字段下嵌套 member_card,含基础信息(logo_url、title)、权益说明(benefit)、自定义字段(custom_field1~3)等
- 注意字段类型:如 supply_bonus、supply_balance 必须为布尔值(true/false),不能写成字符串
- PHP 发送时需设置 header:Content-Type: application/json; charset=utf-8,并用 json_encode($data, JSON_UNESCAPED_UNICODE) 编码
- 返回结果需检查 errcode,0 表示成功,非 0 需根据 errmsg 定位问题(常见如字段缺失、图片未上传、签名错误)
四、在 Laravel / ThinkPHP 等框架中集成建议
避免在控制器里硬编码调用逻辑,应封装为 Service 类统一管理微信卡券能力。
- 新建 WechatCardService 类,内含 getAccessToken()、createMemberCard($params)、createQRCode($cardId) 等方法
- 配置项(appid、appsecret、card_secret)统一放在 .env 或 config 文件中,运行时注入
- 网络请求部分可复用框架自带 HTTP 客户端(如 Laravel 的 Http Facade 或 Guzzle),简化异常处理与重试逻辑
- 关键操作(如发券)建议加日志记录请求参数与响应,便于排查审核失败或用户领券异常



















