公众号快速创建小程序(复用认证资质)

  这段时间一直在忙项目重构的事情,中间在原先小程序第三方代开发的基础上做了公众号快速生成小程序、小程序信息设置以及代开发一套流程。

现在公司季度考核,空闲了就把这块流程梳理一下,方便大家的同时以便于自己记录。

首先要说一下为什么要搞这个公众号快速创建小程序

  众所周知,小程序的一些接口需要微信认证之后才可以用,比如手机号授权、支付等,换句话说,也就是你给微信交钱了,微信才会让你用他的高级接口,而这个金额是300大洋,如果你同时拥有公众号和小

程序,那你每年就要交600大洋,有没有一种方式,就是你维护了公众号的认证状态,小程序认证就不会过期呢,答案是肯定的,那就是公众号快速创建小程序。

公众号快速创建小程序之后,创建的小程序的认证状态和公众号保持一致,这样的话你就只用维护公众号的认证状态就好

这样的好处:1,省了钱;2,降低了维护成本;

接下来我们就说一下怎么才能实现公众号快速创建小程序

  大体流程就是:准备第三方 =》公众号授权=》快速创建小程序授权=》小程序信息设置=》代码版本指定=》提交审核=》发布=》信息设置、跳转规则设置等

  至于第三方准备以及小程序代码操作请移步 https://www.cnblogs.com/hbyzs/p/7060521.html 之前已经做过介绍,下面咱们重点过一下第二部到第四部

  代码整合:我这边是把授权做了一个抽象类、创建小程序跟信息设置一个抽象类、代码指定提交审核一个冲向类、发布以及跳转规则设置一个抽象类,保证抽象类各司其职,便于项目维护。

在创建第三方的时候需要选择快速“快速创建小程序”权限,否则用户公众号授权之后并不能触发快速创建小程序授权,

  授权流程:首先进入公众号授权页,用户扫码之后要判定用户是否授权“快速创建小程序”权限,如果有则根据第三方的component_access_token调用快速创建小程序接口同步跳转到小程序快速创建

授权页,同时跳转路径里边需要带上你的授权回调,毕竟用户授权之后你需要知道用户是否授权成功,有了这个授权回调,用户授权成功之后微信会同步跳转到你这个回调地址,并且会把一个ticket附加

到回调链接上,这样你就可以获取到这个ticket,而这个ticket就是你为用户创建小程序的凭证。

  创建小程序代码:需要说明的一点就是这个ticket是一次性的,所以如果不能保证你的代码能一次过那就ticket调用之后把微信放回的数据记一下日志吧,方便下面流程的打通,应为一个公众号一个月只

能授权创建小程序5次,否侧抗不住你调试。

         // 获取公众号授权之后产生的公众号本身接口调用凭证access_token
         $access_token_msg = InterfaceUtils::getAuthAccessToken( $this->wxa_app_id );
         if ( empty( $access_token_msg['status'] ) || empty( $access_token_msg['data'] ) ) {
             $this->error_key == $access_token_msg['code'];
             return;
         }
         $access_token = $access_token_msg['data'];
         
         $params = array(
             'ticket' => $this->ticket // 授权凭证
         );
         $result = CurlUtils::curl_post( 'https://api.weixin.qq.com/cgi-bin/account/fastregister?access_token='.$access_token, json_encode( $params ) );
         if ( !empty( $result['errcode'] ) ) {
             $this->error_key = $result['errcode'];
         }
         $this->created_xcx_msg = $result;
         $authorization_code = $result['authorization_code'];
         
         $target_auth_msg = InterfaceUtils::getAuthMsg( $authorization_code );
         if ( empty( $target_auth_msg['status'] ) ) {
             $this->error_key = $target_auth_msg['code'];
             return;
         }
     // 这个$target_auth_msg 就是你创建的小程序信息 $target_auth_msg = $target_auth_msg['data'];

  小程序创建成功了,接下来我们要搞的就是设置小程序的基本信息,包含昵称、logo、备注信息的设置

  昵称设置:昵称设置有次数限制的,同时也有敏感词汇,名称被占用等检测,所以请详细记下微信返回数据日志,便于问题定位

      $params = array(
             'nick_name' => '小程序的名字',
             'license'	 => '组织机构代码证或营业执照–临时素材mediaid,如果没有则随你开心,随便写',
         );
         
         $result = CurlUtils::curl_post( 'https://api.weixin.qq.com/wxa/setnickname?access_token='.$this->target_access_token, json_encode( $params, JSON_UNESCAPED_UNICODE ) );

  头像设置:头像的话稍微有点儿烦,就是给小程序设置头像的接口不接受网络路径的图片资源,只接收临时资源id,所以你需要把图片上传到小程序的临时资源,这时候你就有了一个资源id,然后再把

这个资源id传给微信,然后才能实现头像设置的功能

         // 上传临时资源也不支持网络路径,所以你需要把资源下下来,然后通过模拟form表单提交的方式
         $file_name = hash( 'md5', time() );
         $file_path = APP_PATH.'../runtime/image/'.$file_name.'.png';
         $image_content = file_get_contents( $this->xcx_set_data['head_image'] );
         $result = file_put_contents( $file_path, $image_content );
         
         $post_data = array(
             'media' => $file_path,
         );
         if ( class_exists( '\CURLFile' ) ) {
             $post_data['media'] = new \CURLFile( $file_path );
         }
         
         $result = CurlUtils::curl_post( 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token='.$this->target_access_token.'&type=image', $post_data );
         if ( empty( $result['media_id'] ) ) {
             $this->error_key = AuthErrorCodeMaps::PARAMS_ERROR;
             return;
         }
         
         // 拿到资源id之后通过微信接口实现头像设置,当然这个图片也是有大小等限制,这个可以看文档
         $media_id = $result['media_id']; 
         $post_data = array(
             'head_img_media_id' => $media_id,
             'x1' => 0,
             'y1' => 0,
             'x2' => 1,
             'y2' => 1
         );
         
         $result = CurlUtils::curl_post( 'https://api.weixin.qq.com/cgi-bin/account/modifyheadimage?access_token='.$this->target_access_token, json_encode( $post_data ) );  

  备注设置:

        $post_data = array(
             'signature' => ‘用户小程序的备注信息’
         );
         
         $result = CurlUtils::curl_post( 'https://api.weixin.qq.com/cgi-bin/account/modifysignature?access_token='.$this->target_access_token, json_encode( $post_data, JSON_UNESCAPED_UNICODE ) );
         

  如果你的第三方要求特殊的类目已经插件支持,那么请看下边代码

      // 为小程序设置类目
      $params = array(
             'categories' => array(
                 array(
                     'first'    => 类目id,从微信获取,
                     'second'   => 类目id,从微信获取,
                     'certicates' => array(
                     )
                 )
             )
         );
         
         $result = CurlUtils::curl_post( 'https://api.weixin.qq.com/cgi-bin/wxopen/addcategory?access_token='.$this->target_access_token, json_encode($params) );
     
      // 为小程序设置插件
      $post_data = array(
             'action' 		    => 'apply',
             'plugin_appid' 	=> '插件的app_id'
         );
         
         $result = CurlUtils::curl_post( 'https://api.weixin.qq.com/wxa/plugin?access_token='.$this->target_access_token, json_encode( $post_data ) );

  

就这样,公众号授权到小程序创建以及基本信息设置就走完了,大家看代码可以发现我跟微信服务器交互用的参数json_decode的时候都用了JSON_UNESCAPED_UNICODE这个参数,是为了防止中文转义,

这个流程相对简单,逻辑也不繁琐,但愿对有需求的你有所帮助,如果有什么问题请评论区评论,我会及时回复。

创作不易,如需转载请注明出处:https://www.cnblogs.com/hbyzs/p/11308492.html

posted @ 2019-08-06 14:01  湖边油纸伞  阅读(2216)  评论(0编辑  收藏  举报