Skip to content
On this page

微信公众号简结


微信公众号开发流程概述

  1. 参考链接

  2. 详解

    1. 前提配置

      • 注册微信公众号 - 注册开发者账号(微信开放平台) - 在开发者账号内绑定自己的微信公众号 - 申请测试公众号 - 认证公众号
      • 备案网站并且有服务器。
      • 微信公众平台 - 登录微信公众号 - 设置 - 公众号设置 - 功能设置 - 添加JS接口安全域名,
      • 微信公众平台 - 登录微信公众号 - 开发 - 基本配置 - 添加IP地址白名单(配置后才能获取 access_token )
    2. 在微信公众号平台获取基本参数

      • token
      • test_token
      • appid
      • appsecret
      • mch_id //支付
      • test_appid
      • test_appsecret
      • server_notify
      • key
    3. 服务器基本参数

      • 签名
      • ACESS_TOKEN
      • 配置JSSDK
      • openid(oauth2.0)
    4. 其它注意事项

      • 开发出现问题时,可以通过接口调用的返回码,以及报警排查指引(在公众平台官网-开发者中心处可以设置接口报警
      • 获取 access_token --> 根据access_token 获取 jsapi_ticket --> 生成JS-SDK权限验证的签名
      • access_token在2小时内有效,过期需要重新获取,但1天内获取次数有限,开发者需自行存储
      • 公众平台接口调用仅支持80端口
      • 如你已有小程序,并且已开通小程序云开发,则可以使用 公众号环境共享 能力,在公众号中使用云开发。
      • 接口权限说明
      • 全局返回码说明
    5. 服务类型

      公众号主要通过公众号消息会话和公众号内网页来为用户提供服务的

      1. 公众号消息会话
        • 群发消息:订阅号为每天1次,服务号为每月4次,向用户群发消息,包括文字消息、图文消息、图片、视频、语音等
        • 被动回复消息:用户给公众号发消息后,可以回复一个消息
        • 客服消息:用户给公众号发消息后的48小时内,公众号可以给用户发送不限数量的消息
        • 模板消息:对用户发送服务通知(如刷卡提醒、服务预约成功通知等)时,公众号可以用特定内容模板,主动向用户发送消息
      2. 公众号内网页
        • 网页授权获取用户基本信息
        • 微信JS-SDK:可以使用它在网页上录制和播放微信语音、监听微信分享、上传手机本地图片、拍照等许多能力
    6. 样例

      html
      <!DOCTYPE html>
      <html lang="en">
          <head>
              <title>弹窗</title>
              <meta charset="UTF-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
              <meta http-equiv="X-UA-Compatible" content="ie=edge">
              <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
              <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
              <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
      
              <style type="text/css">
                  .toast {
                      padding: 10px 25px 10px 25px;
                      background: rgba(0, 0, 0, .5);
                      border-radius: 5px;
                      color: #ffffff;
                      text-align: center;
                      position: fixed;
                      left: 50%;
                      top: 40%;
                      transform: translate(-50%, -50%);
                      z-index: 100;
                  }
              </style>
          </head>
          <body>
              <div id="test">
                  <toast v-if='isShow' :message='isShowMsg'></toast>
                  <div class="container" @click="showToast">
                      点击显示 showToast
                  </div>
              </div>
              <script>
                  var that;
                  Vue.component('toast', {
                      props: [[message'],
                      template: `
                      <div class="toast_bg_transparent">
                          <div class="toast">
                              <span>{{message}}</span>
                          </div>
                      </div>
                      `
                  })
                  new Vue({
                      el: '#test',
                      data() {
                          return {
                              isShow: false,
                              isShowMsg: '', //弹窗提示
                          }
                      },
                      methods: {
                          getA() {
                              var url = 'https://jayjing.wang/gongzhonghao_H5/getConfig.php';
                              $.ajax({
                                  url: url,
                                  complete: res => {
                                      var config = JSON.parse(res.responseText)
                                      console.log('res-config', config)
                                      wx.config({
                                          debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                                          appId: config.appId, // 必填,公众号的唯一标识
                                          timestamp: config.timestamp, // 必填,生成签名的时间戳
                                          nonceStr: config.nonceStr, // 必填,生成签名的随机串
                                          signature: config.signature, // 必填,签名
                                          jsApiList: [] // 必填,需要使用的JS接口列表
                                      });
                                  }
                              })
                          },
                          showToast() {
                              console.log('点击了 showToast')
                              this.isShow = true;
                              this.isShowMsg = '错误提示';
      
                              setTimeout(() => {
                                  this.isShow = false;
                              }, 1000);
                          }
                      },
                      mounted() {
                          this.getA()
                          wx.ready(function(res) {
                              console.log('ready', res)
                              // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
                          });
                      }
                  })
              </script>
          </body>
      </html>
      
      php
      <?php
          header("Content-Type:text/html;charset=utf8"); 
          header("Access-Control-Allow-Origin: *"); //解决跨域
          header('Access-Control-Allow-Methods:GET');// 响应类型  
          header('Access-Control-Allow-Headers:*'); // 响应头设置 
          $appid = "wx9025b8efd---";
          $secret = "3c242548fb56---";
              $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
              $s = file_get_contents($url);
              $s = json_decode($s, true);
              $url_b = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$s[[access_token']}&type=jsapi";
              $data = file_get_contents($url_b);
              $data = json_decode($data, true);
              $ticket = $data[[ticket'];
              //print();
              //echo $ticket;
      
              // 进行sha1签名
              $timestamp = time();
              $nonceStr = createNonceStr();
              // 注意 URL 建议动态获取(也可以写死).
              $protocol = (!empty($_SERVER[[HTTPS']) && $_SERVER[[HTTPS'] !== 'off' || $_SERVER[[SERVER_PORT'] == 443) ? "https://" : "http://";
              $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; // 调用JSSDK的页面地址
              //$url = $_SERVER[[HTTP_REFERER']; // 前后端分离的, 获取请求地址(此值不准确时可以通过其他方式解决)
              $str = "jsapi_ticket={$ticket}&noncestr={$nonceStr}&timestamp={$timestamp}&url={$url}";
              $sha_str = sha1($str);
              $signPackage = array(
                  "appId" =>  $appid,
                  "nonceStr" => $nonceStr,
                  "timestamp" => $timestamp,
                  "signature" => $sha_str,
              );
              //echo $appid.'-----'.$nonceStr.'-----'.$timestamp.'-----'.$sha_str;
          echo urldecode(json_encode($signPackage));
      
          //随机字符串
          function createNonceStr($length = 16) {
              $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
              $str = "";
              for ($i = 0; $i < $length; $i++) {
                  $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
              }
              return $str;
          }
          ?>
      

微信公众号开发配置

  • 接入微信公众平台开发

    1. 填写服务器配置

      开发-基本设置-成为开发者-修改配置-填写:

      • 开发者用来接收微信消息和事件的接口URL
      • Token可由开发者可以任意填写,用作生成签名
      • EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥
      • 可选择消息加解密方式:明文模式、兼容模式和安全模式
    2. 验证消息的确来自微信服务器

      开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上

      校验代码

    3. 依据接口文档实现业务逻辑

  • 公众平台接口域名

    开发者可以根据自己的服务器部署情况,选择最佳的接入域名(延时更低,稳定性更高)。除此之外,可以将其他接入域名用作容灾用途。

  • Access token

    access_token是公众号的全局唯一接口调用凭据,至少要保留512个字符空间,有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效

    公众号和小程序均可以使用AppID和AppSecret调用本接口来获取access_token

    • 调用:

      https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

    • 说明:

      • 建议公众号开发者使用中控服务器统一获取和刷新access_token,不应该各自去刷新;

      • 中控服务器需要在2h提前去刷新新access_token,在刷新过程中,中控服务器可对外继续输出的老access_token,此时公众平台后台会保证在5分钟内,新老access_token都可用,这保证了第三方业务的平滑过渡;

      • access_token的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新access_token的接口,这样便于业务服务器在API调用获知access_token已超时的情况下,可以触发access_token的刷新流程

      • 对于可能存在风险的调用,需要用户管理员确认后才可以成功获取:

        • 开发者通过某IP发起调用->平台返回错误码[89503]并同时下发模板消息给公众号管理员->公众号管理员确认该IP可以调用->开发者使用该IP再次发起调用->调用成功
        • 如公众号管理员第一次拒绝该IP调用,用户在1个小时内将无法使用该IP再次发起调用
        • 公众号管理员多次拒绝该IP调用,该IP将可能长期无法发起调用
        • 建议开发者在发起调用前主动与管理员沟通确认调用需求,或请求管理员开启IP白名单功能并将该IP加入IP白名单列表
  • 接口报警

    当微信服务器向开发者推送消息失败次数达到预定阈值时,会将报警消息发送到指定微信报警群中

    设置方式:公众平台->开发-运维中心->接口报警

    • 通用报警:

      • DNS失败

        • 填写的url,域名是否有误;

          • ping ip/域名
        • 域名是否发生变化,如过期,更新

      • DNS超时5秒

        • 目前不会有此错误
      • 连接超时5秒

        • 连接的IP是否有误

        • 连接的IP是否过载,连接过多

          • 查看接入层服务器连接数,负载,nginx的配置,允许的连接个数

          • 查看nginx错误日志是否有“Connection reset by peer”或“Connection timed out”错误日志,如有说明nginx连接数过超负载。

            一些重要配置参考例子

            haml
            worker_processes  16;          //CPU核数
            error_log  logs/error.log  info;   //错误日志log
            worker_rlimit_nofile 102400;     //打开最大句柄数
            events {
                worker_connections  102400;   //允许最大连接数
            }
            //请求日志记录,关键字段:request_time-请求总时间,upstream_response_time后端处理时 间
            log_format  main  '$remote_addr  - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" "$http_x_forwarded_for" "$host"  "$cookie_ssl_edition" '
                            '"$upstream_addr"   "$upstream_status"  "$request_time"  '
                            '"$upstream_response_time" ';
            access_log  logs/access.log  main;
            
        • 托管商是否有故障

        • 网络运营商是否有故障

        • 是否设置了防火墙

        • 是否网络不通

      • 请求超时5秒

        • 连接的IP是否有误
        • 连接的IP是否接收到报警消息给出的该消息类型的请求
        • 请求是否处理时间过长
          • 机器负载太高,耗时增加
            • 优化性能,扩容。
            • 异步处理。
          • 机器处理异常,消息丢失
      • 回应不合法

        • 连接的IP是否有误
        • 连接的IP是否发生网络错误
        • 业务处理逻辑是否没有按照wiki规范回复消息,或是进入了异常逻辑
      • MarkFail(自动屏蔽,一分钟后解除屏蔽)

        此报警是级别最高的报警,开发者在收到此报警前,必然会收到连接超时,请求超时或回应失败等报警

    • 公众号第三方平台报警(公众号第三方平台的开发者,才需要关注):

      • 推送component_verify_ticket超时5秒
      • 推送component_verify_ticket失败
      • 推送第三方平台消息超时5秒
      • 推送第三方平台消息失败
  • 获取微信服务器IP地址

    1. 获取微信API接口 IP地址

      http请求方式: GET https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token=ACCESS_TOKEN

    2. 获取微信callback IP地址

      http请求方式: GET https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=ACCESS_TOKEN

    3. 网络检测

      HTTP Post请求: https://api.weixin.qq.com/cgi-bin/callback/check?access_token=ACCESS_TOKEN

公众号登录

网页授权

如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息

登录那里要静默登录的功能,前端只传code,后端通过code生成openId,然后去查询该用户有没有注册,有注册就走登录流程,没有注册就返回空。

Openid是用户在公众号内的身份标识,不同公众号拥有不同的openid。

网页授权获取用户openid

小程序获取openid

公众号获取openid

APP获取openid

支付

JSAPI网页支付,即日常所说的公众号支付,可在微信公众号、朋友圈、聊天会话中点击页面链接,或者用微信“扫一扫”扫描页面地址二维码在微信中打开商户HTML5页面,在页面内下单完成支付。

注意:

  1. 请确保实际支付时的请求目录与后台配置的目录一致(现在已经支持配置根目录,配置后有一定的生效时间,一般5分钟内生效),否则将无法成功唤起微信支付。配置方式详见支付授权目录
  2. WeixinJSBridge内置对象在其他浏览器中无效。
  3. JSSDK的wx.chooseWXPay唤起支付,唤起格式内容参考公众号开发指南
  4. JSSDK的JSSDK使用步骤说明链接地址,内容说明信息
  5. 唤起支付返回的res对象驼峰式是JSSDK返回的格式,而err_msg是WeixinJSBridge返回的格式,如商户使用不同的方式,此处响应的字符大小写、格式需注意。

微信支付请求

javascript
wx.chooseWXPay({
  timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
  nonceStr: '', // 支付签名随机串,不长于 32 位
  package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
  signType: '', // 微信支付V3的传入RSA,微信支付V2的传入格式与V2统一下单的签名格式保持一致
  paySign: '', // 支付签名
  success: function (res) {
    // 支付成功后的回调函数
  }
});

微信支付V3的开发文档

菜单配置

  • 概述

    1. 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
    2. 一级菜单最多4个汉字,二级菜单最多8个汉字,多出来的部分将会以“...”代替。
    3. 菜单的刷新策略:
      • 如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单
      • 如果菜单有更新,就会刷新客户端的菜单
      • 测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。​
  • 按钮类型

    1. click:带上key值,推送event给开发者
    2. view:打开预设URL
    3. scancode_push:点击按钮后,调起扫一扫,把结果推送给开发者
    4. scancode_waitmsg:弹出“消息接收中”提示框用户点击按钮后,调起扫一扫,把结果推送给开发者
    5. pic_sysphoto:弹出系统拍照发图用户点击按钮后,调起相机,把图片发送给开发者
    6. pic_photo_or_album:弹出拍照或者相册发图用户点击按钮后,弹出选择器供用户选择“拍照”或者“从手机相册选择”
    7. pic_weixin:弹出微信相册发图器用户点击按钮后,调起微信相册,将选择的相片发送给开发者的服务器
    8. location_select:弹出地理位置选择器用户点击按钮后,调起地理位置选择工具,发送地理位置给开发者
    9. media_id:用户点击media_id类型按钮后,预设素材下发给用户(图片、音频、视频、图文消息),永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。
    10. view_limited:点击view_limited类型按钮后,打开素材对应URL,素材类型只支持图文消息

    3到8的所有事件,仅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用户

    9和10,是专门给资质认证未通过的订阅号准备的事件类型

  • 相关接口

    1. 创建菜单POST:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

    2. 查询GET:https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=ACCESS_TOKEN

    3. 删除GET:https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN

    4. 事件推送:

      1. 点击菜单拉取消息时的事件推送
      2. 点击菜单跳转链接时的事件推送
      3. scancode_push:扫码推事件的事件推送
      4. scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框的事件推送
      5. pic_sysphoto:弹出系统拍照发图的事件推送
      6. pic_photo_or_album:弹出拍照或者相册发图的事件推送
      7. pic_weixin:弹出微信相册发图器的事件推送
      8. location_select:弹出地理位置选择器的事件推送
      9. 点击菜单跳转小程序的事件推送
    5. 个性化菜单:

      1. 创建个性化菜单
      2. 删除个性化菜单
      3. 测试个性化菜单匹配结果
      4. 查询个性化菜单
      5. 删除所有菜单
      • 开发者可以通过以下条件来设置用户看到的菜单:

        • 用户标签(开发者的业务需求可以借助用户标签来完成)
        • 性别
        • 手机操作系统
        • 地区(用户在微信客户端设置的地区)
        • 语言(用户在微信客户端设置的语言)
      • 说明:

        • 要求iPhone6.2.2,Android 6.2.4以上
        • 普通公众号新增接口每日限制2000次,删除接口2000次,测试个性化菜单匹配结果接口20000次
        • 一个公众号的所有个性化菜单,最多只能设置为跳转到3个域名下的链接
        • 创建个性化菜单之前必须先创建默认菜单,如果删除默认菜单,个性化菜单也会全部删除
        • 个性化菜单接口支持用户标签,当用户身上的标签超过1个时,以最后打上的标签为匹配

基础消息

  • 普通消息

    当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。

    • 注意:

      • 推荐使用msgid排重。
      • 微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串
      • 如果需要对用户消息在5秒内立即做出回应,使用“发送消息-被动回复消息”接口向用户被动回复消息时,可以在开发者中心处设置消息加密。
    • 消息类型

      • 文本
      • 图片
      • 语音
      • 视频
      • 小视频
      • 地理位置
      • 链接
  • 接收事件推送

    用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址

    1. 关注/取消关注事件

      为保护用户数据隐私,开发者收到用户取消关注事件时需要删除该用户的所有信息

      推荐使用FromUserName + CreateTime 排重

      服务器无法保证在五秒内处理并回复,可以直接回复空串

    2. 扫描带参数二维码事件

      如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

      如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。

    3. 上报地理位置事件

      用户同意上报地理位置后,每次进入公众号会话时,都会在进入时上报地理位置,或在进入会话后每5秒上报一次地理位置,公众号可以在公众平台网站中修改以上设置。

    4. 自定义菜单事件

      用户点击自定义菜单后,微信会把点击事件推送给开发者,点击菜单弹出子菜单,不会产生上报。

    5. 点击菜单拉取消息时的事件推送

    6. 点击菜单跳转链接时的事件推送

  • 被动回复用户消息

    当用户发送消息给公众号时,会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。

    推荐使用FromUserName + CreateTime 排重

    同上有五秒机制

    如果开发者希望增强安全性,可以在开发者中心处开启消息加密

    一旦遇到以下情况,微信都会在公众号会话中,向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试”:

    • 开发者在5秒内未回复任何内容
    • 开发者回复了异常数据,比如JSON数据等

    可回复消息类型:

    • 文本
    • 图片
    • 语音
    • 视频
    • 音乐
    • 图文
  • 模板消息

    仅用于公众号向用户发送重要的服务通知,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。

    • 使用规则

      1. 认证后的服务号->功能->添加功能插件处->申请模板消息
      2. 需要选择公众账号服务所处的2个行业,每月可更改1次所选行业
      3. 在所选择行业的模板库中选用已有的模板进行调用
      4. 每个账号可以同时使用25个模板
      5. 每个账号的模板消息的日调用上限为10万次,当账号粉丝数超过10W/100W/1000W时,模板消息的日调用上限会相应提升,以公众号MP后台开发者中心页面中标明的数字为准。
    • 接口文档

      1. 模板消息调用时主要需要模板ID和模板中各参数的赋值内容
      2. 模板中参数内容必须以".DATA"结尾,否则视为保留字
      3. 模板保留符号""
    • 可调用接口

      1. 设置所属行业
      2. 获取设置的行业信息
      3. 获得模板ID
      4. 获取模板列表
      5. 删除模板
      6. 发送模板消息
      7. 事件推送
    • 运营规范

      • 允许发的模板消息

        1. 服务即时通知类消息模板

          资料变更类通知、政务服务即时类通知、物品(包含虚拟类)收取类通知、消费交易类通知、签到类通知、状态类通知、登录提醒类通知等一些用户触发后的即时通知。

        2. 服务后未即时通知类消息模板

          • 每月推送频率固定的模板消息

            经过用户同意,发话费通知,水电费通知,物业费通知等

          • 推送频率不固定的模板消息

            除故障类、灾害警示警告类允许特殊情况主动下发

            经过用户同意,发到期提醒类通知、缴费提醒类通知、会议提醒类通知、赛事提醒类通知、发车提醒类通知、航班延误提醒类通知、待办任务提醒类通知等

          • 一般延时性通知

            审核结果类通知、退款结果类通知、投标结果类通知、订单受理结果类通知、报名结果类通知、反馈类通知等

      • 不允许发的模板消息

        1. 模板内容与服务场景(含标题、关键词)不一致的模板

        2. 涉嫌广告营销类消息模板

          消费优惠类通知、购物返利类通知、商品降价类通知、商品更新提醒类通知等

        3. 发送频率过高,有骚扰用户倾向类消息模板

          一经发现频率过高骚扰到用户,或收到用户投诉,将会严厉惩处,轻则封接口处理,重则封号处理。

        4. 涉及红包、卡券、优惠券、代金券、会员卡、积分类消息模板

      • 模板审核标准

        1. 属于允许发的模板

        2. 格式正确

        3. 内容

          • 标题、关键词带有品牌或公司名等没有行业通用性的内容,不能通过,包括但不限于:某某公司服务通知、某某商品购买通知
          • 标题不能带标点或其它特殊符号,且必须以“通知”或“提醒”结尾,否则不能通过 包括不限于:领取红包!、天气提醒!
          • 易被用作群发,标题或关键词不能简要说明具体服务行为或使用场景的模板不能通过,包括但不限于:管理员类通知、公告类通知、系统通知
          • 易对用户骚扰的,发送频率较高的模板不能通过,包括但不限于 :更新类通知、回复类通知、互动类通知
          • 推广宣传、营销类的模板不能通过,包括但不限于 :红包类通知、优惠券类通知、活动类通知、积分类通知、奖励类通知
          • 模板库里已存在类似的模板不通过
        4. 模板内容长度不能超过200个字符,且必须有至少10个固定文字或标点

        5. 模版内容中,参数是可以在发送时赋值的,参数必须以“{ {”开头,以“.DATA} }”结尾)

        6. 严格按模板填写

        7. 可以通过增加“\n”,来实现换行

        8. 模版内容中,第一句话需要为礼貌性、称谓性的用语,这句话统一用{ {first.DATA} }参数来概括

        9. 模版内容的中部必须为2到5个“关键词名称:关键词内容参数”(中文冒号)的组合排列

        10. 模版内容中,末尾必须有{ {remark.DATA} }参数

        11. 直接相连在一起的参数,应简化为一个

        12. 模板标题和模板内容中,不允许带有品牌等关键词

      • 处罚规则

        对于多次使用同一模板违规的,将回收违规模板,不允许再使用,违规处罚将通过微信公众平台站内信告知运营者。

        1. 主动下发给没有接受过服务的接收者(故障报警、灾害报警和不涉及营销推广的通知除外)
        2. 模板消息的发送频率太高
        3. 营销、推广、诱导分享及诱导下载APP
        4. 模板内容与模板标题或关键词无关联
        5. 模板内容是营销性质的群发活动公告通知
  • 公众号一次性订阅消息

    开发者可以授权让微信用户授权第三方移动应用或公众号,获得发送一次订阅消息给到授权微信用户的机会。授权微信用户可以不需要关注公众号。微信用户每授权一次,开发者可获得一次下发消息的权限。

    对于已关注公众号的,消息将下发到公众号会话里;未关注公众号的,将下发到服务通知。

    • 公众号或网页使用一次性订阅消息流程:

      1. 需要用户同意授权,获取一次给用户推送一条订阅模板消息的机会
      2. 通过API推送订阅模板消息给到授权微信用户
  • 群发接口和原创校验

    订阅号每天一条群发,服务号每月4条群发,某些具备开发能力的公众号运营者,可以通过高级群发接口,实现更灵活的群发能力。

    • 注意

      • 使用高级群发接口的每日调用限制为100次,但是用户每月只能接收4条
      • 可以使用预览接口校对消息样式和排版
      • 群发过程中,微信后台会自动进行图文消息原创校验,请提前设置好相关参数(send_ignore等)
      • 开发者可以主动设置 clientmsgid 来避免重复推送
      • 群发接口每分钟限制请求60次,超过限制的请求会被拒绝
      • 图文消息正文中插入自己帐号和其他公众号已群发文章链接的能力
      • 对于已开启API群发保护的账号,群发全部用户时需要等待管理员进行确认,如管理员拒绝或30分钟内没有确认,该次群发失败。用户可通过“设置-安全中心-风险操作保护”中关闭API群发保护功能。
    • 群发图文消息的过程

      1. 预先将图文消息中需要用到的图片,使用上传图文消息内图片接口,上传成功并获得图片 URL;
      2. 上传图文消息素材,需要用到图片时,请使用上一步获取的图片 URL;
      3. 使用对用户标签的群发,或对 OpenID 列表的群发,将图文消息群发出去,群发时微信会进行原创校验,并返回群发操作结果;
      4. 在上述过程中,如果需要,还可以预览图文消息、查询群发状态,或删除已群发的消息等。
    • 群发图片、文本等其他消息类型的过程

      • 群发文本消息,则直接根据下面的接口说明进行群发即可;
      • 群发图片、视频等消息,则需要预先通过素材管理接口准备好 mediaID。
    • 关于群发时使用is_to_all为true使其进入公众号在微信客户端的历史消息列表:

      • 使用is_to_all为true且成功群发,会使得此次群发进入历史消息列表。
      • 为防止异常,认证订阅号在一天内,只能使用is_to_all为true进行群发一次,或者在公众平台官网群发(不管本次群发是对全体还是对某个分组)一次。以避免一天内有2条群发进入历史消息列表。
      • 服务号在一个月内,使用is_to_all为true群发的次数,加上公众平台官网群发(不管本次群发是对全体还是对某个分组)的次数,最多只能是4次。
      • 设置is_to_all为false时是可以多次群发的,但每个用户只会收到最多4条,且这些群发不会进入历史消息列表。

      本接口中所有使用到media_id的地方,现在都可以使用素材管理中的永久素材media_id了。

      但注意,使用同一个素材群发出去的链接是一样的,这意味着,删除某一次群发,会导致整个链接失效。

    • 接口

      1. 上传图文消息内的图片获取URL【订阅号与服务号认证后均可用】

        本接口所上传的图片不占用公众号的素材库中图片数量的5000个的限制。图片仅支持jpg/png格式,大小必须在1MB以下。

      2. 上传图文消息素材【订阅号与服务号认证后均可用】

        含跳转小程序说明

        • 原创校验流程
          • 未命中原创库中的文章,则可以群发
          • 命中原创库中的文章
            • 允许转载该文章,则可以进行群发,会自动替换成原文的样式,且会自动将文章注明为转载并显示来源。

              若希望修改原文内容或样式,或群发时不显示转载来源,可自行与原创公众号作者联系并获得授权之后再进行群发。

            • 原创作者禁止转载该文章,则不能进行群发

              若希望转载该篇文章,可自行与原创公众号作者联系并获得授权之后再进行群发。

      3. 根据标签进行群发【订阅号与服务号认证后均可用】

      4. 根据OpenID列表群发【订阅号不可用,服务号认证后可用】

      5. 删除群发【订阅号与服务号认证后均可用】

        群发之后,随时可以通过该接口删除群发。

        • 只有已经发送成功的消息才能删除
        • 删除消息是将消息的图文详情页失效,已经收到的用户,还是能在其本地看到消息卡片。
        • 删除群发消息只能删除图文消息和视频消息,其他类型的消息一经发送,无法删除。
        • 如果多次群发发送的是一个图文消息,那么删除其中一次群发,就会删除掉这个图文消息也,导致所有群发都失效
      6. 预览接口【订阅号与服务号认证后均可用】

        开发者可通过该接口发送消息给指定用户,在手机端查看消息的样式和排版。为了满足第三方平台开发者的需求,在保留对openID预览能力的同时,增加了对指定微信号发送预览的能力,但该能力每日调用次数有限制(100次)。

      7. 查询群发消息发送状态【订阅号与服务号认证后均可用】

      8. 事件推送群发结果

        若群发任务提交成功,则在群发任务结束时,会向开发者在公众平台填写的开发者URL(callback URL)推送事件

        群发任务彻底完成需要较长时间,将会在群发任务即将完成的时候,就推送群发结果,此时的推送人数数据将会与实际情形存在一定误差

      9. 使用 clientmsgid 参数,避免重复推送

        群发时,微信后台将对 24 小时内的群发记录进行检查,如果该 clientmsgid 已经存在一条群发记录,则会拒绝本次群发请求,返回已存在的群发msgid,开发者可以调用“查询群发消息发送状态”接口查看该条群发的状态。

      10. 控制群发速度

        获取群发速度

  • 接口调用频次限制说明

    1. 由于指标计算方法或统计时间差异,实时调用量数据可能会出现误差,一般在1%以内。
    2. 每个帐号每月共10次清零操作机会,清零生效一次即用掉一次机会(10次包括了平台上的清零和调用接口API的清零)。
    3. 第三方帮助公众号调用时,实际上是在消耗公众号自身的quota。
    4. 每个有接口调用限额的接口都可以进行清零操作。

    公众号调用或第三方平台帮公众号调用对公众号的所有api调用(包括第三方帮其调用)次数进行清零:

    POST: https://api.weixin.qq.com/cgi-bin/clear_quota?access_token=ACCESS_TOKEN

  • 获取公众号的自动回复规则

    1. 第三方平台开发者可以通过本接口,在旗下公众号将业务授权给你后,立即通过本接口检测公众号的自动回复配置。
    2. 本接口仅能获取公众号在公众平台官网的自动回复功能中设置的自动回复规则,若公众号自行开发实现自动回复,或通过第三方平台开发者来实现,则无法获取。
    3. 认证/未认证的服务号/订阅号,以及接口测试号,均拥有该接口权限。
    4. 本接口中返回的图片/语音/视频为临时素材(临时素材每次获取都不同,3天内有效,通过素材管理-获取临时素材接口来获取这些素材),本接口返回的图文消息为永久素材素材(通过素材管理-获取永久素材接口来获取这些素材)。

    GET: https://api.weixin.qq.com/cgi-bin/get_current_autoreply_info?access_token=ACCESS_TOKEN

订阅通知

订阅通知是一个用户主动订阅、服务号按需下发的通知能力。使用过程请遵守《微信公众平台服务协议》(参考链接3)《微信公众平台运营规范》(参考链接4)。

客服消息

网页开发

  1. 适配

    微信中的WKWebview行为和Safari中保持高度一致,唯一的区别是微信Webview中会注入微信JSBridge相关的脚本。

    • 首要原则

      若不能区分是WKWebview的新特性新行为还是微信内部逻辑导致原有页面出现问题时,可使用测试页面分别在Safari和微信中的WKWebview内核分别测试,用以快速定位问题产生的原因。

    • 关注重点

      • 页面功能是否正常
      • 页面屏幕适配是否正常
      • 页面行为是否正常(例如用户在浏览页面时点击返回按钮返回上一个页面时的页面逻辑是否正常)
      • 页面使用的语法是否兼容。
      • JSSAPI是否正常完美的工作。
      • 重点关注Cookie和LocalStorage等相关的逻辑是否正常。
      • 若服务器有设置返回 Cache-Control缓存有效时间,则需要检查相关逻辑是否正常。
    • 受影响的逻辑

      • 在WKWebview中将暂不支持cache jsapi,使用此api的开发者可去掉页面相关逻辑

      • 不再支持通过使用chooseImage api返回的localld

      • 使用了wx.config进行权限授权需关注jsapi调用的失败问题

      • 退出微信账号后,将会清空所有Cookie和LocalStorage

      • 默认阻止cookie跨域,应通过Url中加入自己业务的access_token进行页面间信息传递,减少使用cookie

      • Webview默认支持小窗播放,需要完全按照以下代码设置video标签才可同时兼容不同的iOS版本

        html
        <video webkit-playsinline playsinline> </video>
        
      • Safari或微信WKWebview中,页面A跳转到页面B再返回页面A后不会重新执行Script和Ajax(也不会触发页面reload),但会触发页面的pageshow pageHide等事件

      • Safari或微信WKWebview中,在页面弹出输入键盘后,会触发JQuery的resize事件,而在UIWebView下不会

      • Safari或微信WKWebview中,window unload 事件在只有刷新才能触发,退出页面或者跳转到其他页面都无法触发

      • 不要在无法确保页面缓存策略和逻辑与服务器逻辑完全保持一致的情况下冒然设置相关的Cache-Control

  2. 授权

  3. 样式库(weUI)

    https://github.com/Tencent/weui

    https://weui.io/

  4. JS-SDK

    • 使用步骤

      1. 绑定域名:登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”

      2. 引入JS文件

        http://res.wx.qq.com/open/js/jweixin-1.6.0.js

        http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https)

      3. 通过config接口注入权限验证配置

        javascript
        wx.config({
            debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: '', // 必填,公众号的唯一标识
            timestamp: , // 必填,生成签名的时间戳
            nonceStr: '', // 必填,生成签名的随机串
            signature: '',// 必填,签名
            jsApiList: [] // 必填,需要使用的JS接口列表
        });
        
      4. 通过ready接口处理成功验证

        javascript
        wx.ready(function(){
            // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
        });
        
      5. 通过error接口处理失败验证

        javascript
        wx.error(function(res){
            // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
        });
        
    • 通用接口参数

      1. success:接口调用成功时执行的回调函数。
      2. fail:接口调用失败时执行的回调函数。
      3. complete:接口调用完成时执行的回调函数,无论成功或失败都会执行。
      4. cancel:用户点击取消时的回调函数,仅部分有用户取消操作的api才会用到。
      5. trigger: 监听Menu中的按钮点击时触发的方法,该方法仅支持Menu中的相关接口。
      • 备注:

        不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回。

        以上几个函数都带有一个参数,类型为对象,其中除了每个接口本身返回的数据之外,还有一个通用属性errMsg,其值格式如下:

        调用成功时:"xxx:ok" ,其中xxx为调用的接口名

        用户取消时:"xxx:cancel",其中xxx为调用的接口名

      调用失败时:其值为具体错误信息

    • 相关接口

      • 分享:(朋友+QQ),(朋友圈+QQ空间),(腾讯微博)
      • 图像图片相关
      • 音频录音相关,语音识别
      • 设备信息,网络状态
      • 地理位置
      • 摇一摇周边
      • 界面操作:菜单,窗口,功能按钮
      • 微信扫一扫
      • 微信小店
      • 卡券
      • 支付
      • 快速输入收货地址
      • 签名算法
      • 错误列表
      • 样例代码
  5. 开放标签

    • 跳转小程序:wx-open-launch-weapp

      • 开放对象

        • 已认证的服务号,服务号绑定“JS接口安全域名”下的网页可使用此标签跳转任意合法合规的小程序。
        • 已认证的非个人主体的小程序,使用小程序云开发的静态网站托管绑定的域名下的网页,可以使用此标签跳转任意合法合规的小程序。
    • 跳转APP:wx-open-launch-app

      • 开放对象

        仅开放给已认证的服务号

      • 使用

        在使用该标签之前,首先需要前往微信开放平台的管理中心-公众账号或小程序详情-接口信息-网页跳转移动应用-关联设置中绑定所需要跳转的App

    • 服务号订阅通知按钮:wx-open-subscribe

      • 开放对象

        已认证的服务号

    • 音频播放:wx-open-audio

      • 开放对象

        仅开放给已认证的服务号

      • 使用

        可在vue,react使用标签

  6. 深色模式

    • 切换深色模式

      • iOS:“设置”--“显示与亮度”--“外观”,选择“深色”
      • Android(不同厂商可能略有差别,名字也不尽相同):“系统设置”--“显示”--“深色模式”。
    • 适配

      • meta

        在head中声明

        html
        <meta name="color-scheme" content="light dark">
        

        声明当前页面支持 light 和 dark 两种模式,系统切换到深色模式时,浏览器默认样式也会切换到深色;

      • css可以实现上面 meta 声明的效果

        css
        :root {
            color-scheme: light dark;
        }
        

        媒体查询

        css
        :root {
            color-scheme: light dark;
            background: white;
            color: black;
        }
        
        @media (prefers-color-scheme: dark) {
            :root {
                background: black;
                color: white;
            }
        }
        
      • 图片适配

        html
        <picture>
            <!-- 深色模式下的图片 -->
            <source srcset="dark.jpg" media="(prefers-color-scheme: dark)" />
            <!-- 默认模式下的图片 -->
            <img src="light.jpg"/>
        </picture>
        
      • JavaScript中判断当前模式&监听模式变化

        javascript
        const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
        
        function darkModeHandler() {
            if (mediaQuery.matches) {
                console.log('现在是深色模式')
            } else {
                console.log('现在是浅色模式')
            }
        }
        
        // 判断当前模式
        darkModeHandler()
        // 监听模式变化
        mediaQuery.addListener(darkModeHandler)
        
  7. 云开发

    https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/web.html

素材

图文消息留言

用户管理

帐号管理

  • 二维码

  • 短key托管

  • 微信认证事件推送

    事件推送将会推送给公众号在公众平台官网开发者中心设置的服务地址中,如果公众号已将帐号管理权限集(因为该接口权限从属于帐号管理权限集)授权给第三方平台,那么将由第三方平台代公众号接收事件推送,具体是推送到第三方平台的公众号消息与事件接收URL

    资质认证成功后,公众号就获得了认证相关接口权限,资质认证成功一定发生在名称认证成功之前

    名称认证成功后,公众号才在微信客户端中获得打勾认证标识

    • 相关接口:

      1. 资质认证成功(此时立即获得接口权限)
      2. 资质认证失败
      3. 名称认证成功(即命名成功)
      4. 名称认证失败(这时虽然客户端不打勾,但仍有接口权限
      5. 年审通知
      6. 认证过期失效通知

数据统计

微信卡券

  • 沙箱测试账号

    登录接口测试号申请通过微信扫一扫获得一个全新的appid**(已拥有卡券创建权限,包括朋友的券和会员卡)**和appsecret用于卡券接口调用。

    该appid创建的卡券不会被审核通过,仅白名单内用户可以领取,用于小范围测试,开发者不可用于其他用途。

  • 流程

    1. 获取access_token

    2. 上传卡券logo

      上传图片接口:POST https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN

      设置卡券适用门店

      选取卡券背景颜色

    3. 创建卡券

      创建卡券:POST: https://api.weixin.qq.com/card/create?access_token=ACCESS_TOKEN

      • 卡券ID:一个卡券ID对应一类卡券,包含了相应库存数量的Code码。

      • 卡券Code码:一张卡券的唯一标识,核销卡券时使用此串码,支持商户自定义。

        • 自定义Code码

          通常为商户在现有业 务已有一套Code码体系。

          "use_custom_code":true ,仅支持API创建。

          卡券投放接口中填入code字段值。

          仅支持调用API接口核销。

        • 非自定义Code码

          可使用微信的Code码体 系完成投放、核销。

          "use_custom_code":false ,支持API创建、公众平台创建 (默认为非自定义Code码)。

          卡券投放接口中无需填写code字段,由微信后台分配。

          支持卡券核销助手公众号核销、公众平台网页核销、API接口核销。

        • 导入code模式

          商户须用自己的code码体系 ,且要通过微信渠道下发卡券 (如:二维码/群发/货架等)

          "use_custom_code":true且get_custom_code_mode: " GET_CUSTOM_CODE_MODE_DEPOSIT "

          卡券侧随机在导入的code中下发,不可指定,投放接口不可传code字段

          核销时需同时传入card_id和code,仅支持API

      • 记录用户领券行为

        用户领取卡券后会推送事件通知开发者,领取卡券事件中包含卡券ID、Code码、领取人OpenID、转赠人OpenID。卡券被核销时同样会推送事件

        调用查询Code接口 获取该Code码的状态(是否被领取、核销、删除),若Code码被用户领取且处于有效状态,可获取领券人OpenID。

        从卡券详情页跳转外部链接时,微信后台会自动带上卡券ID、Code码等信息

        在卡券投放接口中加入场景字段outer_str,该字段值会在用户领取时伴随事件通知商户

      • 自定义入口

        使用场景入口,立即使用,仅卡券被用户领取且处于有效状态时显示(未到有效期、转赠中、核销后不显示)。

        服务场景入口,在线商城,仅卡券被用户领取且处于有效状态时显示(转赠中、核销后不显示)。

        营销场景入口,再次购买,卡券处于正常状态、转赠中、核销后等异常状态均显示该入口。

      • 设置快速买单

        • 微信买单的好处

          1. 无需商户具备微信支付开发能力,即可完成订单生成,与微信支付打通。
          2. 可以通过手机公众号、电脑商户后台,轻松操作收款并查看核销记录,交易对账,并支持离线下载。
          3. 支持会员营销,二次营销,如会员卡交易送积分,抵扣积分,买单后赠券等。
        • 开通

          1. 申请开通内测白名单权限后,开发者可以登录微信公众平台mp.weixin.qq.com,进入【卡券功能】-【卡券概况】,点击查看资料和权限
          2. 在高级权限区,有标注微信买单的权限状态,商户先需要开通微信支付,并为收款门店配置核销员,才能激活申请权限。未获得权限时,点击“申请“,开通买单权限
          3. 为收款门店配置收款员“或直接点击”卡券核销“,可前往添加门店核销员,便于后续接收结算通知。
        • 买单接口:POST:https://api.weixin.qq.com/card/paycell/set?access_token=TOKEN

    4. 创建二维码投放

    5. 显示二维码

    6. 设置测试白名单:POST:https://api.weixin.qq.com/card/testwhitelist/set?access_token=TOKEN

    7. 核销卡劵

    8. 其它

      • 卡券接口

      • 事件推送

        • 卡券事件推送:审核事件推送/领取事件推送
        • 转赠事件推送
        • 删除事件推送
        • 核销事件推送
        • 买单事件推送
        • 进入会员卡事件推送
        • 从卡券进入公众号会话事件推送
        • 会员卡内容更新事件
        • 库存报警事件
        • 券点流水详情事件
        • 会员卡激活事件推送
      • 卡券-小程序打通

        • 小程序内领取卡券
          • 步骤
            1. 开发者须有一个有卡券权限的公众号和认证后的小程序账号
            2. 开发者须申请一个开放平台账号,并将小程序和公众号绑定在同一个开放平台账号下
            3. 创建卡券并获得card_id
            4. 在小程序内调用wx.addcard接口并处理领取成功的回调
            5. 在第3步中获取到的card_id、code(加密code)请求解码code接口获取真实的code
            6. 记录用户小程序内的openid、用户领取的code以及card_id
            7. 处理卡券领取事件,记录用户在公众号内的openid、以及用户领取的code以及card_id
        • 小程序内查看卡券
          • 步骤
            1. 开发者须在用户进入小程序时,获取用户已经领取到的卡券的card_id和code(真实code)
            2. 调用wx.openCard打开用户某张卡券供用户查看、使用
        • 小程序开卡组件
          • 跳转型步骤
            1. 创建一张会员卡会员卡,会员卡的激活方式选择“wx_activate":true,"wx_activate_after_submit" : true,并在activate_app_brand_user_name、activate_app_brand_pass传入激活小程序页面的相关信息,并获得card_id
            2. 设置用户开卡时填写的开卡字段,分必填和选填
            3. 获取开卡组件所需的参数
            4. 判断新老用户、客户端版本决定是否要调用开卡插件接口
            5. 调用开卡插件供用户开卡,并处理开卡插件的回调
            6. 获取用户开卡资料并激活用户的会员卡
          • 非跳转型步骤
            1. 创建一张会员卡会员卡,会员卡的激活方式选择“wx_activate":true,"wx_activate_after_submit" : false,并获得card_id
            2. 设置用户开卡时填写的开卡字段,分必填和选填
            3. 获取开卡组件所需的参数
            4. 判断新老用户、客户端版本决定是否要调用开卡插件接口
            5. 调用开卡插件供用户开卡,并处理开卡插件的回调
            6. 获取用户开卡资料
        • 卡券内跳转小程序
          • 步骤
            1. 开发者须将小程序绑定在公众号下
            2. 创建卡券,并将卡内的cell设置小程序对应的path
            3. 处理跳转小程序时获取到的信息
        • 接口
      • 微信礼品卡

        • 类目范围
          • 购物:百货商场、购物中心/购物街、超市、便利店、普通食品、保健食品、酒类、副食品门市、服饰、鞋类箱包、珠宝配饰、化妆品、日护用品、钟表眼镜、鲜花礼品、母婴用品、运动户外、乐器、图书报刊杂志、药房/药店、数码家电、家纺家装、建材五金/机械仪表、综合电商
          • 生活服务:汽车销售、加油站、家政服务、养生养护、婚庆服务、汽车维修
          • 酒店:星级酒店、度假村、快捷酒店
          • 美食:粤菜、茶餐厅、川菜、湘菜、东北菜、西北菜、火锅、自助餐、小吃、快餐、日本料理、韩国料理、东南亚菜、西餐、面包甜点、咖啡厅、江浙菜、其它美食、酒吧/俱乐部、外卖
          • 休闲娱乐:美容美发、美甲、温泉洗浴、运动健身、足疗按摩
        • 储值类型礼品卡:商户需具备单用途预付卡备案才可开展礼品卡业务
        • 单品类型礼品卡:无需具备预付卡资质,平台视为普通兑换卡业务
        • 接入步骤
          1. 新注册流程
            • 若商户还未拥有开通卡券功能的公众号,商户可以登录【微信公众平台】进行公众号注册并进行认证
            • 注册完成后,商户可以登录【微信公众平台】,并进入【添加插件】-【卡包功能】提交相应资料并开通卡券功能
          2. 非新注册流程
            • 若商户已有开通卡券功能的公众号则可根据自身情况,决定是否直接复用
            • 以上开通均需3-5工作日的审核时间,请根据项目进度提前申请操作
          3. 拥有一个认证小程序(礼品卡专用)用于上传礼品卡的代码以及资料。须商户申请或拥有一个礼品卡专用的小程序。
            • 若商户还未拥有认证的小程序,商户可以登录【微信公众平台】进行小程序注册并进行认证
            • 若商户已有认证公众账号,可以登录【微信公众平台】,进入【小程序管理】-【添加】-【快速注册并认证小程序】直接快速注册认证的小程序
          4. 使用用公众号申请商户号
      • 会员卡

        • 门店扫码
          • 功能:新用户可以完成领取会员卡动作;若顾客已经是微信会员,扫描二维码时会快速拉出本店的二维码,进行积分扣减、点餐、买单等动作
          • 适用场景
            1. 餐饮行业,在餐桌上铺设会员卡二维码,用户扫码领会员卡,并实现在线点餐或者会员卡买单功能
            2. 酒店行业,在服务台摆设二维码,顾客扫码后领取会员卡,点击后快速定位到当前门店,快速订房
            3. 丽人行业,在每个店员携带一个带参数会员卡二维码,按照参数统计开卡数量,激励店员发展新卡
          • 流程
            • 开发者需要首先创建会员卡并通过审核,并通过“创建二维码”接口生成会员卡领取二维码
            • 二维码用途三种模式
              1. 扫码打开会员卡,直接进行微信付款
                • 开发者需要在创建会员卡后,调用“开通会员卡买单接口”为当前会员卡设置微信买单功能
                • 商户须确认已经开通了微信支付
              2. 扫码打开会员卡,区分餐桌点菜/下单
              3. 扫码领卡区分领卡来源,进行开卡业绩统计
                • 要完成领卡业绩统计,开发者须在“生成二维码接口”的字段中增加outer_id字段,用作二维码唯一标识
        • 会员卡快速买单
          • 功能:用户点击微信上的“快速买单”按钮可以进入付款页面,系统会自动匹配到用户当前所在门店,用户输入金额后可以快速付款,同时该门店核销员会收到付款通知。
          • 流程
            1. 使用微信快速买单流程,商户须先开通微信支付功能
            2. 开发者调用“创建会员卡接口”后可以得到card_id,之后开发者可以通过“开通快速买单接口”将当前card_id设置为支持快速买单
            3. 用户每完成一笔买单后,开发者将会接收到“买单事件推送”,告知开发者本次交易的门店、用户OpenID、交易金额以及交易订单号
        • 微信会员卡与CRM打通
          • 功能:卡号互通/权益互通/卡面互通/会员资料互通
          • 适用场景:原有系统与微信系统打通
        • 会员卡与支付系统打通
          • 功能:领卡会员发起一笔支付时,商户的crm便可以根据“消费-积分”兑换比例为用户增减积分,持续维护老会员权益
          • 适用场景:
            1. 支付即会员,利用微信支付作为触点,快速拉新
              • 流程
                1. 设置支付即会员,商户须先确认已经开通微信支付功能和微信会员卡功能
                2. 创建一张新的会员卡,并获取card_id(已经创建了会员卡的可以跳过),并设计会员卡开卡流程
                3. 设置支付即会员规则
                4. 用户发起支付、接收消息并领取注册会员卡
                5. 开发者记录领卡用户OpenID、code等信息并为用户激活会员卡
                6. 用户再次支付时,商户调用“授权码查询OpneID接口”查询用户OpenID,并调用“更新会员信息接口”为用户增减积分
            2. 会员卡拉出刷卡,会员卡支付自动变更积分
              • 流程
                1. 创建/更新会员卡支持拉起微信支付付款码(设置会员卡拉出刷卡页面)
                2. 投放会员卡并引导用户使用会员卡
                3. 用户领取会员卡
                4. 开发者记录领卡用户OpenID、code等信息并为用户激活会员卡
                5. 用户到店在卡包内打开会员卡或者通过扫码打开会员卡,并点击“付款”,打开刷卡页面
                6. 商户扫码并调用“授权码查询OpneID接口”查询用户OpenID,并调用“更新会员信息接口”为用户增减积分
            3. 从钱包刷卡入口刷卡,为用户增加积分
              • 流程
                1. 创建/更新会员卡支持拉起微信支付付款码(设置会员卡拉出刷卡页面)
                2. 投放会员卡并引导用户使用会员卡
                3. 用户领取会员卡
                4. 开发者记录领卡用户OpenID、code等信息并为用户激活会员卡
                5. 用户到店,从钱包入口打开刷卡页面
                6. 商户扫码并调用“授权码查询OpneID接口”查询用户OpenID,并调用“更新会员信息接口”为用户增减积分
            4. 会员卡二维码&微信支付入口
              • 流程
                1. 创建/更新会员卡支持拉起微信支付付款码且支持会员卡页面出现微信支付入口
                2. 投放会员卡并引导用户使用会员卡
                3. 用户领取会员卡
                4. 开发者记录领卡用户OpenID、code等信息并为用户激活会员卡
                5. 用户到店在卡包内打开会员卡或者通过扫码打开会员卡,出示会员卡二维码后,出示微信支付二维码
                6. 商户扫码并调用“授权码查询OpneID接口”查询用户OpenID,并调用“更新会员信息接口”为用户增减积分
        • 老会员绑定
          • 功能:一键激活绑定老会员
          • 流程
            1. 创建一张新的会员卡,并设置一键激活属性,获取card_id
            2. 设置该会员卡一键激活的激活项,设置service_statement字段的标题命名及跳转外链
            3. 在外链网页中设置老会员身份识别的选项,譬如手机号、会员号等唯一标识
            4. 接收到用户填写的会员信息后调用激活会员卡接口同步会员的积分、余额等权益信息
          • 解绑会员卡:POST:https://api.weixin.qq.com/card/membercard/unactivate?access_token=ACCESS_TOKEN
        • 会员卡储值
          • 微信储值好处
            1. 会员粘性增加,复购频率提升,商家回头客越来越多
            2. 商户对储值的顾客给出更有竞争力的折扣,新储值会员增多
            3. 用户自助储值,减少门店内储值开卡的时间,提高了效率
          • 优惠组合方案
            1. 充值返现,合理地设置返现比例,促进用户进行储值消费
            2. 储值折扣,对储值消费设置多档折扣,区分会员忠诚度进行优惠划分
            3. 储值消费多倍积分,鼓励用户使用储值
          • demo
            • 余额显示:商户可以通过调用会员卡信息更新接口,将会员的余额实时更新到会员卡中,并显示
            • 储值充值:用户在会员卡内进入商户开发的充值页面可以通过微信支付进行储值码,商户收到支付成功的事件后,为用户的会员卡内增加余额
            • 出示动态码消费:用户到店后点击卡面二维码区域出示动态二维码,商户扫码后可以调用查询code接口识别用户会员身份并进行储值扣减
            • 记录和通知:用户点击“余额”后可以进入余额记录页面,可以看到历史的余额变更记录,同时用户的余额每次变化时,商户可以选择给用户发送专用的模板消息提醒用户
        • 开卡组件
          • 功能:让网页会员卡的开发者通过使用开卡组件,可以开发出快捷、流畅的开卡流程
          • 优势
            1. 节约成本,开发者无需校验手机号即可获得真实可信的手机号
            2. 开卡效率提高,微信会帮助用户填写之前在平台开卡时曾经填写过的字段
            3. 多种用途,既能作为开卡入口也能作为会员卡展示入口
            4. 丰富地自定义能力,多种形式的自定义字段和开卡后跳转商户网页的能力
          • 使用流程
            • 若为非跳转型的开卡组件,用户在开卡后会直接打开领取到的微信原生会员卡
            • 若为跳转型开卡组件,用户开卡后会直接跳转至商户页面,同时其卡包内会被系统自动放入一张未激活状态原生会员卡,开发者需要在接下来的页面内调用激活接口将原生会员卡激活
        • 接口
        • 特殊票券
        • 第三方接入

    流程

    开发资料包:https://mp.weixin.qq.com/zh_CN/htmledition/comm_htmledition/res/cardticket/wx_card_document.zip

微信门店

门店管理接口为商户提供门店批量导入、查询、修改、删除等主要功能,方便商户快速、高效进行门店管理和操作。

智能接口

微信设备功能

  • 目标用户

    • 微信运动手环/记步器生产商
    • 微信语音交互玩具生产商
    • 微信照片输出设备生产商
    • 随身打印设备生产商
    • 智能家居生产商(除iBeacon设备生产商)
    • 个人健康医疗设备生产商
    • 智能路由器生产商
  • 产品接入后能做什么

    • 接入微信运动,设备可以向微信上报步数,厂商公众号可以拉入步数排行榜。
    • 通过公众号常规接口向设备发送微信消息,语音,文字,图片等。
    • 通过硬件设备数据接口向设备发送控制指令,获取设备状态等。
    • 用户可以转发微信朋友圈,聊天界面的图片,文档,地图位置给设备。
    • 访客加入家庭Wi-Fi时,如果与路由器主人是微信好友,即可快速加入。
    • 通过公众号下发消息通知,提醒,告警等。
    • 使用微信快速为Wi-Fi设备配置家庭网络。
    • 在用户首次使用设备时提供引导说明。
  • 设备如何与微信连接

    • 蓝牙设备连接到微信客户端,通过微信客户端与生产商业务服务器通讯。
    • 设备通过内嵌微信SDK,与微信服务器通讯。
    • 设备连接生产商业务服务器,业务服务器再与微信服务器通讯。
  • 开启设备功能条件

    • 硬件生产制造商
    • 服务号已经通过微信认证
  • 步骤

    • 开启设备功能插件:“添加功能插件”页面中选择开启“设备功能”插件
    • 添加产品型号
    • 测试账号添加产品

一物一码

微信发票

  • 电子发票

    • 资源下载

      微信电子发票方案的开票保存及发票提交能力均支持微信内调用及微信外独立App调用,独立App调用微信电子发票相关能力请下载微信电子发票SDK。

      iOS SDK下载:http://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319164&token=&lang=zh_CN

      Android SDK下载:http://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=&lang=zh_CN

    • 开发票

      • 申请商户接口权限

        • 登录公众号后台,在左侧【功能】菜单中找到【添加功能插件】按钮
        • 在可添加的功能插件中找到【电子发票】,点击进入电子发票插件介绍页面
        • 点击【开通】,激活电子发票功能插件。激活后左侧【功能】菜单中会出现【电子发票】菜单
        • 从左侧【功能】菜单【电子发票】入口进入,点击【开通权限】
        • 阅读使用协议,确认开通权限
        • 权限开通成功,权限部分按钮变为“已开通”
      • 商户+开票平台模式

        • 需要进行的准备

          1. 前往微信公众平台申请公众号,获取appid和appsecret,用于调用接口。
          2. 问询开票平台,获取s_pappid
        1. 公众号开票

          1. 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。s_pappid由开票平台通过邮件线下方式提供
          2. 商户获取获取access_token。调用方法见获取Access token;
          3. 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
          4. 商户获取授权页ticket。调用方法见商户接口列表;
          5. 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表;
          6. 将授权页url添加到开票按钮上,供点击跳转;
          7. 商户在后台等待接收用户的授权完成事件,获取授权事件方法见商户接口列表;
          8. 根据开票平台提供的电子发票开票文档向开票平台发送开票请求,之前在第4步时传入的order_id需作为其中一个参数传递给开票平台,以便开票平台在电子发票开具成功后将发票插入用户微信卡包;
          9. 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发)
        2. 扫码开票

          1. 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。s_pappid由开票平台通过邮件线下方式提供
          2. 商家将订单信息按照自身业务逻辑生成二维码,印制到小票上供用户扫描,本步骤根据商户自身业务逻辑生成,不涉及调用微信接口
          3. 商户获取获取access_token。调用方法见获取Access token;
          4. 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
          5. 商户获取授权页ticket。调用方法见商户接口列表; 6 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表;
          6. 商户在后台等待接收用户的授权完成事件,获取授权事件方法见商户接口列表;
          7. 根据开票平台提供的电子发票开票文档向开票平台发送开票请求,之前在第4步时传入的order_id需作为其中一个参数传递给开票平台,以便开票平台在电子发票开具成功后将发票插入用户微信卡包;
          8. 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发)
        3. App开票

          1. 确认App中已经安装最新版的微信SDK
          2. 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。s_pappid由开票平台通过邮件线下方式提供
          3. 商户使用开放平台(open账号)的appid,获取获取access_token。调用方法见获取Access token;
          4. 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
          5. 商户获取授权页ticket。调用方法见商户接口列表;
          6. 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表;
          7. 使用第5步获得的授权页url(auth_url)作为传入参数,拉起微信客户端打开授权页。iOS端拉起方法见iOS客户端打开授权页、Android拉起方法见Android客户端打开授权页
          8. 商户在后台等待接收用户的授权完成事件。注意:此阶段用的是公众号的 appid来接收,请不要与开放平台账号的appid混淆。获取授权事件方法见商户接口列表;
          9. 根据开票平台提供的电子发票开票文档向开票平台发送开票请求,之前在第4步时传入的order_id需作为其中一个参数传递给开票平台,以便开票平台在电子发票开具成功后将发票插入用户微信卡包;
          10. 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发)
        4. 小程序开票

          1. 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。s_pappid由开票平台通过邮件线下方式提供
          2. 商户获取获取access_token。调用方法见获取Access token;
          3. 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
          4. 商户获取授权页ticket。调用方法见商户接口列表;
          5. 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表;
          6. 在小程序开票按钮的点击事件上部署跳转到小程序授权页的逻辑。上一步获得的auth_url和开票小程序appid要作为参数传入。调用方法见商户接口列表;
          7. 商户在后台等待接收用户的授权完成事件,获取授权事件方法见商户接口列表;
          8. 根据开票平台提供的电子发票开票文档向开票平台发送开票请求,之前在第4步时传入的order_id需作为其中一个参数传递给开票平台,以便开票平台在电子发票开具成功后将发票插入用户微信卡包;
          9. 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发)
        5. 支付后开票

          1. 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。s_pappid由开票平台通过邮件线下方式提供
          2. 商户获取获取access_token。调用方法见获取Access token;
          3. 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
          4. 关联商户号和开票平台。本步骤为一次性设置,后续一般在遇到开票平台识别号变更,或者商户更换开票平台时才需要调用本接口重设对应关系。调用方法见商户接口列表;
          5. 查询关联状态,确认商户号已经和开票平台关联成功。调用方法见商户接口列表;
          6. 在发起支付请求的时候指定每一笔交易的支付后开票。在步骤3关联了商户号和开票平台后不代表每一笔支付都会出现开票入口,需要通过本步接口进一步制定才能让支付凭证上出现开票入口。调用方法见商户接口列表;
          7. 商户在后台等待接收用户的授权完成事件,接收授权完成事件所用的appid为商户号关联的appid。获取授权事件方法见商户接口列表;
          8. 根据开票平台提供的电子发票开票文档向开票平台发送开票请求,在第6步时收到的的SuccOrderId需作为其中一个参数传递给开票平台,以便开票平台在电子发票开具成功后将发票插入用户微信卡包;
          9. 开票平台开具电子发票,插入用户卡包。(本步骤由开票平台完成,商户无需开发)
      • 自建平台模式

        • 需要进行的准备

          1. 前往微信公众平台申请公众号,获取appid和appsecret,用于调用接口。
          2. 获取access_token,详情参考获取access_token。
          3. 获取ticket,详情参考获取ticket。
          4. 配置公众号callback,详情参考接收callback推送。
        1. 公众号开票

          1. 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。s_pappid通过调用调用开票平台接口列表接口获得
          2. 商户获取获取access_token。调用方法见获取Access token;
          3. 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
          4. 商户获取授权页ticket。调用方法见商户接口列表;
          5. 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表;
          6. 将授权页url添加到开票按钮上,供点击跳转;
          7. 商户在后台等待接收用户的授权完成事件,获取授权事件方法见商户接口列表;
          8. 创建发票卡券模板。发票卡券模板应和背后的开票主体构成一一对应关系,便于后续若开票主体发生变化时,可以便捷修改。调用方法见开票平台接口列表;
          9. 在自建发票平台开具电子发票;
          10. 上传发票PDF文件。此步骤获得的s_media_id起到关联PDF和发票卡券的作用,将作为参数在下一步的插卡接口中传入。调用方法见开票平台接口列表;
          11. 将电子发票添加到用户微信卡包。调用方法见将电子发票卡券插入用户卡包。
        2. 扫码开票

          1. 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。s_pappid通过调用调用开票平台接口列表接口获得
          2. 商家将订单信息按照自身业务逻辑生成二维码,印制到小票上供用户扫描,本步骤根据商户自身业务逻辑生成,不涉及调用微信接口
          3. 商户获取获取access_token。调用方法见获取获取Access token;
          4. 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
          5. 商户获取授权页ticket。调用方法见商户接口列表;
          6. 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表;
          7. 商户在后台等待接收用户的授权完成事件,获取授权事件方法见商户接口列表;
          8. 创建发票卡券模板。发票卡券模板应和背后的开票主体构成一一对应关系,便于后续若开票主体发生变化时,可以便捷修改。调用方法见开票平台接口列表;
          9. 在自建发票平台开具电子发票;
          10. 上传发票PDF文件。此步骤获得的s_media_id起到关联PDF和发票卡券的作用,将作为参数在下一步的插卡接口中传入。调用方法见开票平台接口列表;
          11. 将电子发票添加到用户微信卡包。调用方法见开票平台接口列表。
        3. App开票

          1. 确认App中已经安装最新版的微信SDK
          2. 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。s_pappid通过调用调用开票平台接口列表接口获得
          3. 商户使用开放平台(open账号)的appid,获取获取access_token。调用方法见获取Access token;
          4. 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
          5. 商户获取授权页ticket。调用方法见开票平台接口列表;
          6. 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表;
          7. 使用第5步获得的授权页url(auth_url)作为传入参数,拉起微信客户端打开授权页。iOS端拉起方法见iOS客户端打开授权页、Android拉起方法见Android客户端打开授权页
          8. 商户在后台等待接收用户的授权完成事件。注意:此阶段用的是公众号的 appid来接收,请不要与开放平台账号的appid混淆。获取授权事件方法见商户接口列表;
          9. 创建发票卡券模板。发票卡券模板应和背后的开票主体构成一一对应关系,便于后续若开票主体发生变化时,可以便捷修改。调用方法见开票平台接口列表;
          10. 在自建发票平台开具电子发票;
          11. 上传发票PDF文件。此步骤获得的s_media_id起到关联PDF和发票卡券的作用,将作为参数在下一步的插卡接口中传入。调用方法见开票平台接口列表;
          12. 将电子发票添加到用户微信卡包。调用方法见开票平台接口列表。
        4. 小程序开票

          1. 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。s_pappid通过调用调用开票平台接口列表接口获得
          2. 商户获取获取access_token。调用方法见获取获取Access token;
          3. 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
          4. 商户获取授权页ticket。调用方法见商户接口列表;
          5. 商户获取授权页url,上一步获取的授权页ticket将作为参数传入。另外,本环节里面作为参数传入的order_id要注意保留,传递给开票平台作为向用户提供电子发票的依据。调用方法见商户接口列表;
          6. 在小程序开票按钮的点击事件上部署跳转到小程序授权页的逻辑。上一步获得的auth_url和开票小程序appid要作为参数传入。调用方法见商户接口列表;
          7. 商户在后台等待接收用户的授权完成事件,获取授权事件方法见商户接口列表;
          8. 创建发票卡券模板。发票卡券模板应和背后的开票主体构成一一对应关系,便于后续若开票主体发生变化时,可以便捷修改。调用方法见开票平台接口列表;
          9. 在自建发票平台开具电子发票;
          10. 上传发票PDF文件。此步骤获得的s_media_id起到关联PDF和发票卡券的作用,将作为参数在下一步的插卡接口中传入。调用方法见开票平台接口列表;
          11. 将电子发票添加到用户微信卡包。调用方法见开票平台接口列表。
        5. 支付后开票

          1. 提前获取开票平台标识s_pappid,因为同一个开票平台的s_pappid都相同,所以获取s_pappid的操作只需要进行一次。s_pappid通过调用调用开票平台接口列表接口获得
          2. 商户获取获取access_token。调用方法见获取Access token;
          3. 设置商户联系方式。调用方法见商户接口列表。注意,本步骤不能忽略,否则将造成下一步获取授权页报错;
          4. 关联商户号和开票平台。本步骤为一次性设置,后续一般在遇到开票平台识别号变更,或者商户更换开票平台时才需要调用本接口重设对应关系。调用方法见商户接口列表;
          5. 查询关联状态,确认商户号已经和开票平台关联成功。调用方法见商户接口列表;
          6. 在发起支付请求的时候指定每一笔交易的支付后开票。在步骤3关联了商户号和开票平台后不代表每一笔支付都会出现开票入口,需要通过本步接口进一步制定才能让支付凭证上出现开票入口。调用方法见商户接口列表;
          7. 商户在后台等待接收用户的授权完成事件,接收授权完成事件所用的appid为商户号关联的appid。获取授权事件方法见商户接口列表;
          8. 查询用户开票信息。根据用户授权完成事件中获得的order_id 与 s_pappid,查询用户开票信息。调用方法见商户接口列表;
          9. 创建发票卡券模板。发票卡券模板应和背后的开票主体构成一一对应关系,便于后续若开票主体发生变化时,可以便捷修改。调用方法见开票平台接口列表;
          10. 在自建发票平台开具电子发票;
          11. 上传发票PDF文件。此步骤获得的s_media_id起到关联PDF和发票卡券的作用,将作为参数在下一步的插卡接口中传入。调用方法见开票平台接口列表;
          12. 将电子发票添加到用户微信卡包。调用方法见将电子发票卡券插入用户卡包。
    • 电子发票报销

      1. 在微信公众号/小程序提交电子发票报销

        1. 获取公众平台账号/企业微信账号的access_token,调用方法见获取access_token
        2. 拉起发票列表页,调用方法见微信公众号拉起发票列表 微信小程序拉起发票列表
        3. 待用户在发票列表页勾选发票,所选发票的card_id和encrypt_code会以js回调的形式返回;
        4. 根据card_id和encrypt_code查询发票信息,调用方法见查询报销发票信息;
        5. 根据企业自身报销流程将发票信息转换成报销单,本步骤不需要调用微信接口;
        6. 提交报销单,将发票状态更新为“已锁定”,避免发票被重复报销,调用方法见报销方更新发票状态,如果报销多张发票,可以调用报销方批量更新发票状态接口进行更新;
        7. 完成报销流程后,将发票状态更新为“已报销”。调用方法见报销方更新发票状态,如果报销多张发票,可以调用报销方批量更新发票状态接口进行更新
      2. 在企业微信/企业号提交电子发票报销

        1. 获取企业微信/企业号账号的access_token,调用方法见获取access_token
        2. 拉起发票列表页。企业微信2.1新增了选择电子发票的js-API接口,使用企业微信的企业将企业微信更新至2.1以上版本后,可快速实现在企业微信中选中电子发票的功能。调用方法见企业微信拉起发票列表
        3. 待用户在发票列表页勾选发票,所选发票的card_id和encrypt_code会以js回调的形式返回;
        4. 根据card_id和encrypt_code查询发票信息,调用方法见查询报销发票信息;
        5. 根据企业自身报销流程将发票信息转换成报销单,本步骤不需要调用微信接口;
        6. 提交报销单,将发票状态更新为“已锁定”,避免发票被重复报销,调用方法见报销方更新发票状态,如果报销多张发票,可以调用报销方批量更新发票状态接口进行更新;
        7. 完成报销流程后,将发票状态更新为“已报销”。调用方法见报销方更新发票状态,如果报销多张发票,可以调用报销方批量更新发票状态接口进行更新
      3. 在外部App提交电子发票报销

        1. 获取开放平台账号的access_token,调用方法见获取Access token
        2. 拉起发票列表页,调用方法见报销方接口列表
        3. 待用户在发票列表页勾选发票,所选发票的card_id和encrypt_code会以js回调的形式返回;
        4. 根据card_id和encrypt_code查询发票信息,调用方法见报销方接口列表;
        5. 根据企业自身报销流程将发票信息转换成报销单,本步骤不需要调用微信接口;
        6. 提交报销单,将发票状态更新为“已锁定”,避免发票被重复报销,调用方法见报销方接口列表接口进行更新;
        7. 完成报销流程后,将发票状态更新为“已报销”。调用方法见报销方接口列表接口进行更新
      4. 扫码提交电子发票报销

        1. 维护二维码,展示在报销系统PC端页面上,供用户使用使用微信、企业微信或独立报销APP扫码后,打开相应报销页面,向报销系统提交微信电子发票。报销系统获取到发票信息后,员工继续在PC端完成后续报销流程;
        2. 获取公众平台账号/企业微信账号的access_token,调用方法见获取Access token
        3. 拉起发票列表页,调用方法见报销方接口列表
        4. 待用户在发票列表页勾选发票,所选发票的card_id和encrypt_code会以js回调的形式返回;
        5. 根据card_id和encrypt_code查询发票信息,调用方法见报销方接口列表;
        6. 根据企业自身报销流程将发票信息转换成报销单,本步骤不需要调用微信接口;
        7. 提交报销单,将发票状态更新为“已锁定”,避免发票被重复报销,调用方法见报销方接口列表接口进行更新;
        8. 完成报销流程后,将发票状态更新为“已报销”。调用方法见报销方接口列表接口进行更新
    • 商户接口

    • 开票平台接口

    • 报销方接口

    • 极速开发票接口

    • 电子发票自助打印接口

    • 非税票据

      • 接入模式

        • 执收单位+财政局模式

          执收单位负责获取用户授权开票,财政局负责开财政电子票据,并且添加到用户卡包,适用于执收单位和财政局相互独立的场景。

        • 自建平台模式

          自建平台既负责执收单位的职责,也负责财政局的职责。适用于同一个角色负责获取用户授权和开票的场景。

      • 执收单位接入需要准备的信息

        1. 前往微信公众平台申请公众号,获取appid和appsecret,用于调用接口。
        2. 获取access_token,详情参考接口列表。
        3. 获取ticket。
        4. 配置公众号callback,详情参考接口列表。
        5. 申请执收单位公众号接口权限: 执收单位申请微信财政电子票据权限,需发送以下信息至[email protected]进行申请。
        6. 如果是app开财政电子票据,需要先前往微信开放平台申请账号,创建应用,获取appid和appsecret。另外,需发送以下信息至[email protected]进行接口权限申请。
        7. 找财政局提供s_pappid
      • 财政局接入需要准备的信息

        1. 前往微信公众平台申请公众号,获取appid和appsecret,用于调用接口。
        2. 获取access_token。
        3. 配置公众号callback。
        4. 申请财政局接口权限:
        5. 获取s_pappid,并提供给执收单位。同一个财政局的s_pappid是一样的,所以只需要调用一次接口,并保存起来。
        6. 创建财政电子票据模板card_id,同一个财政局可以对应多个执收单位,同一个执收单位,使用同一个card_id,不同的执收单位,使用不同的card_id
      • 自建平台接入需要准备的信息

        自建平台既负责执收单位的职责,也负责财政局的职责,所以需要准备以上执收单位和财政局需要准备的信息。参考执收单位接入需要准备的信息和财政局接入需要准备的信息。

      • 公众号取票

        1. 财政局获取s_pappid,并提供给执收单位。同一个财政局的s_pappid是一样的,所以只需要调用一次接口,并保存起来。
        2. 执收单位获取access_token
        3. 执收单位获取ticket
        4. 执收单位获取授权页链接
        5. 执收单位将授权页链接提供给用户,用户点击授权,用户打开授权页面
        6. 执收单位接收用户授权的callback,得知用户授权领取财政电子票据,通知财政局领取财政电子票据。
        7. 财政局创建财政电子票据模板card_id,同一个财政局可以对应多个执收单位,同一个执收单位,使用同一个card_id,不同的执收单位,使用不同的card_id
        8. 财政局将财政电子票据pdf上传到微信财政电子票据平台
        9. 财政局检查上传到微信财政电子票据平台的pdf
        10. 财政局给用户添加财政电子票据
      • app取票

        1. 财政局获取s_pappid,并提供给执收单位。同一个财政局的s_pappid是一样的,所以只需要调用一次接口,并保存起来。
        2. 执收单位获取access_token
        3. 执收单位获取ticket
        4. 执收单位获取授权页链接
        5. 执收单位在app跳转到微信的授权页面,让用户点击授权
        6. 由于开放平台账号没有接受callback的能力,所以由执收单位的公众号接收用户授权的callback,得知用户授权领取财政电子票据,通知财政局领取财政电子票据
        7. 财政局创建财政电子票据模板card_id,同一个财政局可以对应多个执收单位,同一个执收单位,使用同一个card_id,不同的执收单位,使用不同的card_id
        8. 财政局将财政电子票据pdf上传到微信财政电子票据平台
        9. 财政局检查上传到微信财政电子票据平台的pdf
        10. 财政局给用户添加财政电子票据
    • 接口

非税缴费

非税收入:除税收以外,由各级政府、事业单位提供公共服务取得的财政性资金。例如:出入境、身份证等办证费用,交警、工商、物价等罚没收入,市政公园、国家景区旅游门票等。