微信开发

  1. 作者QQ:67065435 QQ群:821635552

  2. 本站内容全部为作者原创,转载请注明出处!

由于微信开发文档阅读时比较混乱,现整理如下: 部分细节本处未整理,比如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机制

  13. 批量获取用户信息

  14. openid批量获取
  15. openid获取用户信息

开放平台

  1. 三方平台

    1. 获取开放票据(被动接收)
      # 在微信开放平台-第三方平台创建一个新的第三方平台,该平台创建时要填写自己服务器上的一个后端链接,这个后端链接可以接收到来自微信服务器的请求,服务器的请求
      # 中会携带component_verify_ticket,每10分钟都有新的component_verify_ticket发过来,component_verify_ticket有效期是12小时
      提供:
          1. 第三方的消息接收地址      必须      (登录官网后在官网自行配置,第三方平台审核通过后,微信服务器每10分钟会向该地址推送component_verify_ticket,有效期12小时)
      获得:
          1. component_verify_ticket
      
    2. 获取公共请求钥
      # 接收到了component_verify_ticket,我们查看微信开放平台-第三方平台的component_appid、component_appsecret,然后使用这三个参数获取component_access_token,
      # component_access_token 存在有效期7200秒,有效期内尽量不要再次获取component_access_token,因为新的component_access_token会使原来的component_access_token
      # 在10秒后失效,为了系统的稳定,建议在第7000秒就去获取新的component_access_token,保证component_access_token前后衔接稳妥
      提供:
          1. component_appid           必须      第三方平台的appid(登录官网后在官网找)
          2. component_appsecret       必须      第三方平台的appsecret(登录官网后在官网找)
          3. component_verify_ticket   必须      微信服务器向你自己的服务器推送(上一步获取)
      获得:
          1. component_access_token              第三方平台的component_access_token
          2. expires_in                          component_access_token 的有效时长(秒)
      
    3. 获取预授权码
      # 现在有了component_access_token,就可以获取pre_auth_code了,pre_auth_code用来生成带二维码的授权链接,pre_auth_code虽然有有效期,但是只能使用一次!!!
      # 但是只能使用一次!!!但是只能使用一次!!!但是只能使用一次!!!但是只能使用一次!!!但是只能使用一次!!!但是只能使用一次!!!但是只能使用一次!!!
      提供:
          1. component_appid           必须      第三方平台的appid(登录官网后在官网找)
          2. component_access_token    必须      第三方平台的component_access_token(上一步获取)
      获得:
          1. pre_auth_code                       第三方平台的预授权码
          2. expires_in                          pre_auth_code 的有效时长(秒)
      
    4. 生成带二维码的授权链接
      # 有了pre_auth_code,就可以通过redirect_uri指定一个后端链接,该链接用来接收用户扫码授权后的authorization_code,然后通过后面多个步骤,获取到公众号的一些重要信
      # 息保存到数据库,并跳转到一个用户可见的界面,提示公众号授权成功。
      提供:
          1. component_appid   必须      第三方平台的appid(登录官网后在官网找)
          2. pre_auth_code     必须      预授权码(上一步获取)
          3. redirect_uri      必须      回调uri(扫描二维码同意授权后,授权链接页跳到的链接,该链接不要带GET参数,而且要保持授权域一致)
          4. auth_type         必须      授权类型:点击授权链接后 1-仅授权公众号 2-仅授权小程序 3-公众号、小程序都授权(与biz_appid互斥)
          5. biz_appid         非必须    授权指定的小程序/公众号的唯一标识(与auth_type互斥,不用管这个参数,用auth_type实现授权功能就行了)
      获得:
          1. authorization_code          第三方平台的公众号授权码
      
    5. 获取授权信息(主动获取)
      # 有了authorization_code,就来获取authorizer_access_token、authorizer_refresh_token,authorizer_access_token可以用来实现公众号在第三方平台调用某些与用户互动的接口(图文创建、消息推送等)
      # authorizer_access_token存在有效期,而且不能频繁获取,因此建议将authorizer_access_token保存下来,在快要到期的时候通过authorizer_refresh_token获取新的authorizer_access_token
      提供:
          1. component_appid           必须      第三方平台的appid(登录官网后在官网找)
          2. component_access_token    必须      第三方平台的component_access_token(上上一步获取)
          3. authorization_code        必须      第三方平台的公众号授权码
      获得:
          1. authorization_info                  授权信息
              1. authorizer_appid                    公众号在第三方平台的appid
              2. authorizer_access_token             公众号在第三方平台的access_token
              3. expires_in                          authorizer_access_token 的有效时长(秒)
              4. authorizer_refresh_token            用来刷新authorizer_access_token(下一步才用到)
              5. func_info                           授权公众号允许第三方平台调用的权限,见权限集列表↓
      权限集列表:
           https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/product/third_party_authority_instructions.html
      
    6. 刷新授权码(主动获取)
      # 该接口用来刷新component_access_token
      提供:
          1. component_appid           必须      第三方平台的appid(登录官网后在官网找)
          2. component_access_token    必须      第三方平台的component_access_token(上上上一步获取)
          3. authorizer_appid          必须      公众号在第三方平台的appid(上一步获取)
          4. authorizer_refresh_token  必须      用来刷新authorizer_access_token(上一步获取)
      获得:
          1. authorizer_access_token             公众号在第三方平台的access_token
          2. expires_in                          authorizer_access_token 的有效时长(秒)
          3. authorizer_refresh_token            用来刷新authorizer_access_token
      
    7. 获取授权信息(主动获取)
      # 该接口使用authorizer_appid来获取公众号的昵称、头像、公众号类型、认证状态等信息
      提供:
          1. component_appid           必须      第三方平台的appid(登录官网后在官网找)
          2. component_access_token    必须      第三方平台的component_access_token(上上上上一步获取)
          3. authorizer_appid          必须      公众号在第三方平台的appid(上上一步获取)
      获得:
          1. nick_name            公众号昵称
          2. head_img             公众号头像
          3. service_type_info    0: 订阅号 1: 老订阅号 2: 服务号
          4. verify_type_info     -1: 未认证 0-已认证 1:新浪认证 2:讯微认证 3:名称未认证 4:新浪认证,名称未认证 5: 讯微认证,名称未认证
          5. user_name            公众号原始id
          6. principal_name       公众号主体
          7. alias                公众号微信号
          8. business_info        开通功能
              1. open_store           微信门店
                  0-未开通
                  1-已开通
              2. open_scan            微信扫商品
                  0-未开通
                  1-已开通
              3. open_pay             微信支付
                  0-未开通
                  1-已开通
              4. open_card            微信卡券
                  0-未开通
                  1-已开通
              5. open_shake           微信摇一摇
                  0-未开通
                  1-已开通
          1. qrcode_url           公众号二维码
      
    8. 授权变更消息通知(被动接收)

      # 这里接收通知的链接与第一步所说的链接是同一个
      提供:
          1. 无
      获得:
          1. AppId
          2. CreateTime
          3. InfoType
              1. unauthorized     取消授权
              2. updateauthorized 更新授权
              3. authorized       授权成功
          4. AuthorizerAppid
          5. AuthorizationCode
          6. AuthorizationCodeExpiredTime
          7. PreAuthCode
      
    9. 第三方静默登录(不同于公众号登录)

    10. 批量获取用户信息(‘openid批量获取’是公众平台的接口,在这能用)
    11. openid批量获取
    12. openid获取用户信息(直接第四步)

微信支付

  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;
    }
    
  7. 微信服务商-点金计划回调页跳转

    window.onload = function () {
        var initData ={action:'onIframeReady',displayStyle:'SHOW_CUSTOM_PAGE'};
        var initPostData = JSON.stringify(initData);
        parent.postMessage(initPostData,'https://payapp.weixin.qq.com');
        document.querySelector('#按钮1的ID').onclick = function(e) {
            var mchData = {action:'jumpOut',jumpOutUrl:'按钮1跳转的界面'};
            var postData = JSON.stringify(mchData);
            parent.postMessage(postData,'https://payapp.weixin.qq.com');
        };
        document.querySelector('#按钮2的ID').onclick = function(e) {
            var mchData = {action:'jumpOut',jumpOutUrl:'按钮2跳转的界面'};
            var postData = JSON.stringify(mchData);
            parent.postMessage(postData,'https://payapp.weixin.qq.com');
        };
    }
    
Copyright © 豆包嘿嘿~ 2012-∞ 冀ICP备17033181号 all right reserved,powered by Gitbook修订: 21-06-15 16:29

results matching ""

    No results matching ""