全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解微信第三方小程序开发

详解微信第三方小程序开发

微信申请第三方之后可以获取授权方的很多权限,主要的是生码和开发,生码的第三方授权之前已经写了一篇文章,最近做了小程序开发,总结一下写下来供大家参考

注意事项:如果在调试过程中返回了错误码请到小程序开发api页面查看,

      小程序开发使用的域名是你申请第三方时候填写的域名,

     小程序代码模板最多只有50个,可以删除然后重新添加。

准备工作:

  申请微信第三方并且权限那边要选上开发,第三方申请成功之后就是准备小程序了,需要两个小程序,一个作为小程序代码库,一个作为用户测试用,需要在第三方授权。

  添加小程序代码库: 在第三方那边将小程序添加为开发小程序,然后该小程序就成为了第三方的开发小程序,之后该小程序提交的代码都会存入第三方,你可以选择版本添加为模板,一个第三方最             多只能有50个模板。

开发流程:

  post请求公共方法,与微信服务器交互用

  代码如下

protected function curl_post( $curlHttp, $postdata ) {
    $ch = curl_init(); //用curl发送数据给api
    curl_setopt( $ch, CURLOPT_POST, true );
    curl_setopt( $ch, CURLOPT_POST, true );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_URL, $curlHttp );
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $postdata );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );

    $response = curl_exec( $ch );
    curl_close( $ch );
    $result = json_decode( $response, true );
    return $result;
  }

  get请求公共方法,与微信服务器交互用

  代码如下

protected function buildRequestForm( array $param, $method, $target='',$jump=false) {
    $sHtml = "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><form id='autoSubmit' action='".$target."' method='".$method."'>";

    if ( !empty( $param ) ) {
      foreach( $param as $key => $value ) {
        $sHtml.= "<input type='hidden' name='".$key."' value='".urldecode($value)."'/>";
      }
    }
    $sHtml .= "</form>";

    if($jump) $sHtml = $sHtml."<script>document.getElementById(\"autoSubmit\").submit();</script>";

    return $sHtml;
  }

  获取授权方api调用拼成access_token公共方法

  代码如下

protectd function getAccessToken( $appId ) {
    $accessToken = '';

    if ( empty( $appId ) ) {
      return $accessToken;
    }
    
    // 中间的逻辑自己填充

    return $accessToken;
  }

  首先是开发一套小程序并且上传,之后再第三方里边把该版本设置成模板,这个时候你就用了模板id(用于代码指定用)

  通过调用微信接口,给用户小程序指定小程序代码

  代码如下

public function commitCode() {
    $appId = input( 'app_id', '' );
    $descript = input( 'descript', '测试代码指定' );
    $version = input( 'version', 'V.1.0' );
    $templateId = input( 'template_id', 1 );
    if ( empty( $appId ) ) {
      $this->error( appid不能为空 );
      return;
    }

    if ( empty( $templateId ) && ( $templateId != 0 ) ) {
      $this->error( '模板id不能为空' );
      return;
    }

    $accessToken = $this->getAccessToken( $appId );

    // 个人信息我给清除了,空字符部分请自己补充
    $extJson = array(
      'extAppid' => $appId,
      'ext' => array(
        'attr1' => 'value1'
      ),
      'extPages' => array(
          'pages/index/index' => array(
            'navigationBarTitleText'  => ''
          ),
          'pages/media/media' => array(
            'navigationBarTitleText'  => ''
          )
      ),
      'pages' => array(
          'pages/index/index',
          'pages/media/media'
      ),
      'window' => array(
          'backgroundColor'      => '#f8f8f8',
          'navigationBarTextStyle'  => 'white',
          "navigationBarTitleText"  => "",
          'navigationBarBackgroundColor' => '#2b3b48'
      ),
      'tabBar' => array(
        'list' => array(
          array(
            'text'   => '',
            'pagePath' => 'pages/index/index',
          ),
          array(
            'text'   => '',
            'pagePath' => 'pages/media/media',
          )
        )
      ),
      'networkTimeout' => array(
          'request'    => 10000,
          'uploadFile'  => 10000,
          'downloadFile' => 10000,
          'connectSocket' => 10000
      )
    );

    $params = array(
      'template_id'  => $templateId,
      'user_version' => $version,
      'user_desc'   => $descript,
      'ext_json'   => json_encode( $extJson, JSON_UNESCAPED_UNICODE )
    );
    $result = $this->curl_post( 'https://api.weixin.qq.com/wxa/commit?access_token='.$accessToken, json_encode( $params, JSON_UNESCAPED_UNICODE ) );
    if ( empty( $result ) || !empty( $result['errcode'] ) ) {
      $this->error( '代码指定错误' );
      return;
    }

    $this->success( '操作成功' );
    return;
  }

  指定代码之后就是查看功能是否正常了,所以就要调用微信接口获取体验二维码扫码体验,

  代码如下

public function getExpCode() {
    $appId = input( 'app_id', '' );
    if ( empty( $appId ) ) {
      $this->error( appid不能为空 );
      return;
    }

    $accessToken = $this->getAccessToken( $appId );
    if ( empty( $accessToken ) ) {
      $this->error( '获取授权accessToken错误' );
      return;
    }

    $params = array(
      'access_token' => $accessToken
    );
    $result = $this->buildRequestForm( $params, 'GET', 'https://api.weixin.qq.com/wxa/get_qrcode?access_token='.$accessToken, true );
    echo $result;
    exit;
  }

  如果授权用户没有体验权限则扫码之后不能进行小程序功能体验,这个时候就需要你通过微信接口将用户设置为体验者了,这一步可以在小程序平台用户管理里边操作,你可可以通过接口进行体验者的添加和删除,添加的时候需要被添加者微信确认

  代码如下

public function bindTester() {
    $appId = input( 'app_id', '' );
    $wxNumber = input( 'wx_number', '' );
    if ( empty( $appId ) ) {
      $this->error( appid不能为空 );
      return;
    }
    if ( empty( $wxNumber ) ) {
      $this->error( 微信号不能为空 );
      return;
    }

    $accessToken = $this->getAccessToken( $appId );
    if ( empty( $accessToken ) ) {
      $this->error( '获取授权accessToken错误' );
      return;
    }
    $params = array(
      'wechatid' => $wxNumber
    );
    $result = $this->curl_post( 'https://api.weixin.qq.com/wxa/bind_tester?access_token='.$accessToken, json_encode( $params ) );
    print_r($result);
    exit;
    return;
  }

public function unBindTester() {
    $appId = input( 'app_id', '' );
    $wxNumber = input( 'wx_number', '' );
    if ( empty( $appId ) ) {
      $this->error( appid不能为空 );
      return;
    }
    if ( empty( $wxNumber ) ) {
      $this->error( 微信号不能为空 );
      return;
    }

    $accessToken = $this->getAccessToken( $appId );
    if ( empty( $accessToken ) ) {
      $this->error( '获取授权accessToken错误' );
      return;
    }
    $params = array(
      'wechatid' => $wxNumber
    );
    $result = $this->curl_post( 'https://api.weixin.qq.com/wxa/unbind_tester?access_token='.$accessToken, json_encode( $params ) );
    print_r($result);
    exit;
    return;
  }

  如果体验功能有问题则重新调整小程序代码逻辑然后上传之后设置为模板,如果没有问题则将小程序代码提交审核,但是提交审核的时候需要指定category,所以需要调用微信接口查看

  如果授权用户没有设置的话,需要对方进入小程序平台,在填写小程序信息的地方添加服务条目

  代码如下

public function getCategory() {
    $appId = input( 'app_id', '' );
    if ( empty( $appId ) ) {
      $this->error( appid不能为空 );
      return;
    }

    $accessToken = $this->getAccessToken( $appId );
    if ( empty( $accessToken ) ) {
      $this->error( '获取授权accessToken错误' );
      return;
    }

    $params = array(
      'access_token' => $accessToken
    );
    $result = $this->buildRequestForm( $params, 'GET', 'https://api.weixin.qq.com/wxa/get_category?access_token='.$accessToken, true );

    echo $result;
    exit;
  }

  拿到服务条目之后就是提交代码审核了

  代码如下

public function submitAudit() {
    $appId = input( 'app_id', '' );
    if ( empty( $appId ) ) {
      $this->error( appid不能为空 );
      return;
    }

    $accessToken = $this->getAccessToken( $appId );
    if ( empty( $accessToken ) ) {
      $this->error( '获取授权accessToken错误' );
      return;
    }

    $params = array(
      'item_list' => array(
          array(
            'address' => 'pages/index/index',
            'tag' => 'IT科技',
            'first_class' => 'IT科技',
            'second_class' => '硬件与设备',
            'title' => '生成二维码'
          ),
          array(
            'address' => 'pages/media/media',
            'tag' => '工具',
            'first_class' => '工具',
            'second_class' => '办公',
            'title' => '多媒体上传'
          )
      )
    );
    $result = $this->curl_post( 'https://api.weixin.qq.com/wxa/submit_audit?access_token='.$accessToken, json_encode( $params, JSON_UNESCAPED_UNICODE ) );

    echo'<pre>';
    print_r($result);
    exit;
    $this->success( '操作成功' );
    return;
  }

  提交审核之后,微信服务器会返回一个审核id,你可以通过该审核id查询审核状态

  当审核通过之后,微信会给你第三方注册的回调地址推送一个审核结果

  代码如下

public function getAuditStatus (){
    $appId = input( 'app_id', '' );
    if ( empty( $appId ) ) {
      $this->error( appid不能为空 );
      return;
    }

    $accessToken = $this->getAccessToken( $appId );
    if ( empty( $accessToken ) ) {
      $this->error( '获取授权accessToken错误' );
      return;
    }
    $params = array(
      'auditid' => 12334
    );
    $result = $this->curl_post( 'https://api.weixin.qq.com/wxa/get_auditstatus?access_token='.$accessToken, json_encode( $params ) );
    print_r($result);
    exit;
    return;
  }

  当小程序审核通过了接下来就是小程序发布了

  代码如下

public function release (){
    $appId = input( 'app_id', '' );
    if ( empty( $appId ) ) {
      $this->error( appid不能为空 );
      return;
    }

    $accessToken = $this->getAccessToken( $appId );
    if ( empty( $accessToken ) ) {
      $this->error( '获取授权accessToken错误' );
      return;
    }
    $result = $this->curl_post( 'https://api.weixin.qq.com/wxa/release?access_token='.$accessToken, '{}' );
    print_r($result);
    exit;
    return;
  }

就这样,小程序开发就完成了,逻辑很简单,代码也没难度,本文章的代码仅供大家参考,如果有问题请评论指出,我尽量补充。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# 微信第三方小程序  # 微信第三方小程序开发方案  # 第三方  # 为空  # 程序开发  # 你可以  # 这个时候  # 上传  # 设置为  # 的是  # 给你  # 你就  # 互用  # 也没  # 最多  # 仅供  # 可以通过  # 用了  # 希望能  # 很简单  # 如果没有  # 能有 


相关文章: 建站主机空间推荐 高性价比配置与快速部署方案解析  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何通过VPS搭建网站快速盈利?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  已有域名和空间如何搭建网站?  建站之星×万网:智能建站系统+自助建站平台一键生成  Swift中循环语句中的转移语句 break 和 continue  开封网站制作公司,网络用语开封是什么意思?  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  如何选择网络建站服务器?高效建站必看指南  如何在阿里云ECS服务器部署织梦CMS网站?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  长沙做网站要多少钱,长沙国安网络怎么样?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  如何获取开源自助建站系统免费下载链接?  教学论文网站制作软件有哪些,写论文用什么软件 ?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  用v-html解决Vue.js渲染中html标签不被解析的问题  免费网站制作appp,免费制作app哪个平台好?  如何用PHP工具快速搭建高效网站?  再谈Python中的字符串与字符编码(推荐)  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  建站主机服务器选型指南与性能优化方案解析  制作网站外包平台,自动化接单网站有哪些?  广州建站公司哪家好?十大优质服务商推荐  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  ,如何利用word制作宣传手册?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  非常酷的网站设计制作软件,酷培ai教育官方网站?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  如何正确选择百度移动适配建站域名?  简历在线制作网站免费版,如何创建个人简历?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何在IIS7上新建站点并设置安全权限?  网站设计制作企业有哪些,抖音官网主页怎么设置?  婚礼视频制作网站,学习*后期制作的网站有哪些?  如何在宝塔面板中修改默认建站目录?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何做静态网页,sublimetext3.0制作静态网页?  Swift中switch语句区间和元组模式匹配  自助网站制作软件,个人如何自助建网站?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  C#如何序列化对象为XML XmlSerializer用法  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  佛山网站制作系统,佛山企业变更地址网上办理步骤? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。