调用微信卡券接口前必须确认:①appid与appsecret匹配且公众号已开通卡券功能;②服务器ip已加入白名单;③logo_url为300×300 png(≤200kb),code_color为合法十六进制色值。

微信卡券接口调用前必须确认的 3 个配置项
ThinkPHP 本身不内置微信卡券能力,所有操作都依赖微信官方 card 接口,而调用前提是完成基础鉴权和资源准备。漏掉任意一项,后续所有请求都会返回 {"errcode":40001,"errmsg":"invalid credential"} 或类似错误。
-
APPID和APPSECRET必须与公众号/小程序绑定的主体一致,且该公众号已开通“微信卡券”功能(后台「公众号设置 → 功能设置 → 添加功能插件」中确认) - 服务器 IP 必须在公众号后台「开发 → 基本配置 → IP白名单」中登记,否则调用
https://api.weixin.qq.com/cgi-bin/token会直接被拒绝 - 上传卡券所需的
logo_url、code_color等字段有硬性格式要求:logo 必须是 PNG 格式、尺寸 300×300 像素、大小 ≤ 200KB;code_color必须是十六进制颜色值(如"#FF6B00"),不能带#以外的符号
创建卡券时最常出错的 JSON 结构问题
ThinkPHP 中用 curl 或 Http::post() 提交卡券数据,失败往往不是逻辑问题,而是 JSON 字段嵌套或类型不符合微信规范。微信要求所有字段严格按文档顺序和类型提交,例如 date_info 必须是对象而非字符串,advanced_info 中的 use_condition 必须显式传空对象而非省略。
- 不要用
json_encode($data, JSON_UNESCAPED_UNICODE)后直接拼接——ThinkPHP 的Http::post()默认会二次编码,导致 JSON 被转义成字符串,微信解析失败 -
location_id_list字段即使不设门店,也必须传空数组[],不能传null或不传,否则返回errcode:40059 - 优惠券类卡券(
cash)的least_cost和reduce_cost单位是「分」,必须为整数,不能是浮点数或带单位字符串(如"10.5"或"10.5元")
生成带参数二维码领取卡券的两个关键步骤
用户扫码后跳转到你指定页面并自动领券,不是简单调一个接口就行。核心在于:先用 create_qrcode 接口生成 ticket,再用该 ticket 换取真实二维码图片 URL;同时你的落地页(如 /card/receive?ticket=xxx)必须能通过 jsapi_ticket + signature 校验来源,并调用 chooseCard JS-SDK 方法。
公众号运营|微信公众号|公众号一条龙|公众号全流程|自媒体运营|微信自动化|内容流水线|AIGC 工作流 — 公众号一条龙运营总控入口,覆盖选题→撰稿→审稿→排版→配图→发布等8个子技能,单条指令即可完成从零到上架的完整图文。面向公众号编辑、自媒体等用户。
- 生成 ticket 时,
action_name必须为"QR_CARD",且action_info中的card_id必须是已审核通过的卡券 ID(草稿状态不可用) - 前端 JS 调用
chooseCard前,必须先执行config接口注入权限签名,签名计算所用的jsapi_ticket和nonceStr需和服务端保持一致,否则提示"invalid signature" - 用户领取成功后,微信会 POST 数据到你配置的
card_api回调地址(需在公众号后台填写),注意该回调使用的是HTTP POST原始 XML,不是 JSON,ThinkPHP 中需用file_get_contents('php://input')读取并解析
ThinkPHP 中处理卡券核销的坑:核销码不是 code 字段
很多开发者以为用户领取后拿到的 code 就是核销码,直接拿去调 update_card 或 verify 接口,结果返回 errcode:40037(无效的卡券 code)。实际上,用户领取后得到的是加密后的 encrypt_code,必须先用 decrypt 接口解密才能获得真实核销码。
- 解密接口
https://api.weixin.qq.com/card/code/decrypt需要access_token+encrypt_code,返回的code才是核销时consume接口需要的参数 - 同一个
encrypt_code只能解密一次,解密后微信会将其置为已使用状态;若重复解密,返回errcode:48001 - 核销成功后,微信不会主动通知你,需轮询
getcardlist或监听card_consume事件回调来确认状态
卡券功能链条长、状态多、接口分散,最容易卡在「以为参数对了,其实格式或时机错了」。尤其是 encrypt_code 解密和二维码 ticket 刷新这两个环节,调试时建议把每一步的原始响应体都打日志,别只看 errcode。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










