微信开发

  1. 作者QQ:67065435 QQ群:821635552

由于微信开发文档阅读时比较混乱,现整理如下: 部分细节本处未整理,比如access_token存在有效期、获取新access_token后旧access_token依然有5分钟有效期等...

公众平台

  1. 开发测试工具

  2. 先获取: appid、appsecret

  3. 获取access_token

  4. 先获取:access_token

  5. 发送客服消息

  6. 先调整: 开发→基本配置

  7. 接收用户消息
  8. 接收事件推送
  9. 被动回复消息

  10. 先绑定: 微信开放平台(如果不需要Unionid,非必须)

  11. 网页授权
  12. Unionid机制

开放平台

  1. 三方平台

    1. 获取开放票据(被动接收)
      1. 请求:
          1. 无
      1. 响应:
          1. component_verify_ticket
      
    2. 获取开放令牌(主动获取)
      1. 请求:
          1. component_appid
          1. component_appsecret
          1. component_verify_ticket
      1. 响应:
          1. component_access_token
      
    3. 获取预授权码(主动获取)
      1. 请求:
          1. component_appid
          1. component_access_token
      1. 响应:
          1. pre_auth_code
          1. expires_in(有效期)
      
    4. 获取授权码(授权流程)
      1. 获取预授权码(见上文)
      1. 生成授权页
         https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=XXX&pre_auth_code=XXX&redirect_uri=XXX&auth_type=XXX
         component_appid:
             第三方平台appid
         pre_auth_code:
             预授权码
         redirect_uri:
             授权回调地址(微信会向该地址发送: authorization_code)
         auth_type:
             值为1: 授权公众号
             值为2: 授权小程序
             值为3: 两者均授权
      
    5. 获取授权信息(主动获取)
      1. 请求:
          1. component_appid
          1. component_access_token
          1. authorization_code
      1. 响应:
          1. authorization_info
              1. authorizer_appid
              1. authorizer_access_token
              1. expires_in(有效期)
              1. authorizer_refresh_token
              1. func_info
      
    6. 刷新授权码(主动获取)
      1. 请求:
          1. component_appid
          1. component_access_token
          1. authorizer_appid
          1. authorizer_refresh_token
      1. 响应:
          1. authorizer_access_token
          1. authorizer_refresh_token
          1. expires_in(有效期)
      
    7. 获取授权公众号信息(主动获取)
      1. 请求:
          1. component_appid
          1. component_access_token
          1. authorizer_appid
      1. 响应:
          1. nick_name            公众号昵称
          1. head_img             公众号头像
          1. service_type_info    0: 订阅号 1: 老订阅号 2: 服务号
          1. verify_type_info     -1: 未认证 0-已认证 1:新浪认证 2:讯微认证 3:名称未认证 4:新浪认证,名称未认证 5: 讯微认证,名称未认证
          1. user_name            公众号原始id
          1. principal_name       公众号主体
          1. alias                公众号微信号
          1. business_info        开通功能
              1. open_store           微信门店
                  1. 0-未开通
                  1. 1-已开通
              1. open_scan            微信扫商品
                  1. 0-未开通
                  1. 1-已开通
              1. open_pay             微信支付
                  1. 0-未开通
                  1. 1-已开通
              1. open_card            微信卡券
                  1. 0-未开通
                  1. 1-已开通
              1. open_shake           微信摇一摇
                  1. 0-未开通
                  1. 1-已开通
          1. qrcode_url           公众号二维码
      
    8. 授权变更消息通知(被动接收)

      1. 需要:
          1. 无
      1. 得到:
          1. AppId
          1. CreateTime
          1. InfoType
              1. unauthorized     取消授权
              1. updateauthorized 更新授权
              1. authorized       授权成功
          1. AuthorizerAppid
          1. AuthorizationCode
          1. AuthorizationCodeExpiredTime
          1. PreAuthCode
      
    9. 第三方静默登录(不同于公众号)

微信支付

  1. 微信内支付(JSAPI支付)

    1. 统一下单
    2. 调起支付
    3. 结果通知
  2. 微信扫码支付(Native支付)

    1. 统一下单
    2. 调起支付1
    3. 调起支付2
    4. 结果通知
  3. 手机软件支付(APP支付)

    1. 统一下单
    2. 调起支付
    3. 结果通知
  4. 手机浏览器支付(H5支付)

    1. 统一下单
    2. 调起支付
    3. 结果通知
  5. 微信小程序支付(小程序支付)

    1. 统一下单
    2. 调起支付
    3. 结果通知
  6. 消息加解密核心代码

    <?php
    function msgDecrypt($encrypt, $encode_key)
    {
        //处理$encode_key
        $encode_key = base64_decode("{$encode_key}=");
        $substr_key = substr($encode_key, 0, 16);
        //解密消息
        $decrypt = base64_decode($encrypt);
        $decrypt = openssl_decrypt($decrypt, 'AES-256-CBC', $encode_key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $substr_key);
        $decrypt = substr($decrypt, 0, (strlen($decrypt) - ord(substr($decrypt, -1))));
        $decrypt = substr($decrypt, 16, strlen($decrypt));
        $lens = unpack("N", substr($decrypt, 0, 4));
        $lenx = $lens[1];
        $decrypt = substr($decrypt, 4, $lenx);
        $decrypt = simplexml_load_string($decrypt, 'SimpleXMLElement', LIBXML_NOCDATA);
        $result = json_decode(json_encode($decrypt, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), true);
        return $result;
    }
    
    function msgEncrypt($xml, $encode_key)
    {
        //处理$encode_key
        $encode_key = base64_decode("{$encode_key}=");
        $substr_key = substr($encode_key, 0, 16);
        //加密消息
        $str_16 = '';
        $char_list = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
        for ($i = 0; $i < 16; $i++) {
            $str_16 .= $char_list[mt_rand(0, strlen($char_list) - 1)];
        }
        $xml = $str_16 . pack('N', strlen($xml)) . $xml . $this->config['app_id'];
        $block_size = 32;
        $xml_len = strlen($xml);
        $append_len = $block_size - ($xml_len % $block_size);
        $append_chr = chr($append_len);
        $end_str = '';
        for ($i = 0; $i < $append_len; $i++) {
            $end_str .= $append_chr;
        }
        $encrypt = $xml . $end_str;
        $encrypt = openssl_encrypt($encrypt, 'AES-256-CBC', $encode_key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $substr_key);
        $encrypt = base64_encode($encrypt);
        return $encrypt;
    }
    
Copyright © 豆包嘿嘿~ 2012-∞ 冀ICP备17033181号 all right reserved,powered by Gitbook修订: 2020-07-01 09:34:13

results matching ""

    No results matching ""