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


Posted in Javascript onJune 23, 2017

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

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

注意事项:如果在调试过程中返回了错误码请到小程序代开发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;
  }

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

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

Javascript 相关文章推荐
setAttribute 与 class冲突解决
Feb 17 Javascript
Prototype ObjectRange对象学习
Jul 19 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
Nov 15 Javascript
封装获取dom元素的简单实例
Jul 08 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
Dec 19 Javascript
简单谈谈vue的过渡动画(推荐)
Oct 11 Javascript
javascript实现文件拖拽事件
Mar 29 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
May 31 Javascript
JSON生成Form表单的方法示例
Nov 21 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
Jan 18 jQuery
JS中封装axios来管控api的2种方式
Sep 11 Javascript
package.json各个属性说明详解
Mar 11 Javascript
Easyui在treegrid添加控件的实现方法
Jun 23 #Javascript
详解用vue.js和laravel实现微信支付
Jun 23 #Javascript
详解用vue.js和laravel实现微信授权登陆
Jun 23 #Javascript
妙用Angularjs实现表格按指定列排序
Jun 23 #Javascript
VUE中v-model和v-for指令详解
Jun 23 #Javascript
JavaScript正则表达式简单实用实例
Jun 23 #Javascript
js中的事件委托或是事件代理使用详解
Jun 23 #Javascript
You might like
php入门小知识
2008/03/24 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
javascript 数组精简技巧小结
2020/02/26 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
使用Python编写简单的画图板程序的示例教程
2015/12/08 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
2020/11/29 Python
台湾森森购物网:U-mall
2017/10/16 全球购物
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
德国童装购物网站:NICKI´S.com
2018/04/20 全球购物
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
硕士研究生自我鉴定范文
2013/12/27 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
目标责任书范本
2014/04/16 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
先进员工获奖感言
2014/08/14 职场文书
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript