微信小程序生成太阳码

  1. https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=access_token

必须通过POST提交

而且参数必须是JSON的格式

  1. <?php
  2. /**
  3. * curl请求数据
  4. *
  5. * @param string $url 请求地址
  6. * @param array $param 请求参数
  7. * @param string $contentType 请求参数格式(json)
  8. * @return boolean|mixed
  9. */
  10. function https_request($url = '', $param = [], $contentType = ''){
  11. $ch = curl_init();
  12. // 请求地址
  13. curl_setopt($ch, CURLOPT_URL, $url);
  14. // 请求参数类型
  15. $param = $contentType == 'json' ? json_encode($param) : $param;
  16. // 关闭https验证
  17. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  18. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  19. // post提交
  20. if($param){
  21. curl_setopt($ch, CURLOPT_POST, 1);
  22. curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
  23. }
  24. // 返回的数据是否自动显示
  25. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  26. // 执行并接收响应结果
  27. $output = curl_exec($ch);
  28. // 关闭curl
  29. curl_close($ch);
  30. return $output !== false ? $output : false;
  31. }
  32. $access_token="10_X1w4ypXMdfliiv4orym7n7Ur8UMV3LsPAyyBng-DOjcZfAW1mlfKb1BAvBQuBIMUvk_Bq2lv3E2TI8QLvTrnmy1TBxoDeXu_JvR_sobPBkUimmA-aNasktu-J6UWLCgAAAFUL";
  33. $request_url='https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$access_token;
  34. $request_data=array(
  35. 'scene'=>'abcdef',
  36. 'page'=>'pages/home/index',
  37. 'width'=>'690'
  38. );
  39. print_r(https_request($request_url,$request_data,'json'));

这里有几点需要注意,page参数中的值一定要是小程序中存在的。

这里的access_token是用小程序的Appid和AppSecret生成的。之前还傻乎乎的去开启公众号的APPSecret。

再一个,这里返回的数据,不是JSON数据,而是二维码图片数据。

如何通过postman操作呢?

万能的POSTMAN啊。

  1. {"page":"pages/home/index","scene":"abcdef","width":690}

封装

封装接口

  1. // 获取太阳码
  2. public function get_xcx_code() {
  3. $uid = $_POST['uid'];
  4. if (!$uid) {
  5. $this->json->setErr('10001', '缺少参数');
  6. $this->json->Send();
  7. }
  8. // 获取用户信息
  9. $user_model = M('user');
  10. $user_info = $user_model->where(['id'=>$uid])->find();
  11. if (!$user_info) {
  12. $this->json->setErr('10002', '用户不存在');
  13. $this->json->Send();
  14. }
  15. $scene = $user_info['invite_code'];
  16. vendor('Func.Http');
  17. $request_data = [
  18. 'scene' => $scene,
  19. 'page' => "pages/home/index",
  20. 'width' => 690
  21. ];
  22. $request_url='https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$this->get_access_token();
  23. $result = Http::doPostJson($request_url,$request_data);
  24. header('Content-Type: image/jpeg; charset=UTF-8');
  25. echo $result;exit;
  26. }

处理成base64

  1. // 获取太阳码
  2. public function get_xcx_code() {
  3. $uid = $_POST['uid'];
  4. if (!$uid) {
  5. $this->json->setErr('10001', '缺少参数');
  6. $this->json->Send();
  7. }
  8. // 获取用户信息
  9. $user_model = M('user');
  10. $user_info = $user_model->where(['id'=>$uid])->find();
  11. if (!$user_info) {
  12. $this->json->setErr('10002', '用户不存在');
  13. $this->json->Send();
  14. }
  15. $scene = $user_info['invite_code'];
  16. vendor('Func.Http');
  17. $request_data = [
  18. 'scene' => $scene,
  19. 'page' => "pages/home/index",
  20. // 'width' => 690
  21. ];
  22. $request_url='https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$this->get_access_token();
  23. $result = Http::doPostJson($request_url,$request_data);
  24. // ob_clean();
  25. // header('Content-Type: image/png; charset=UTF-8');
  26. // echo $result;exit;
  27. $this->json->setErr(0, '获取成功');
  28. $this->json->setAttr('data',base64_encode($result));
  29. $this->json->Send();
  30. }

封装post请求

  1. // 通过POST方式发送json数据
  2. static public function doPostJson($url = '', $param = [] ,$contentType = 'json') {
  3. $ch = curl_init();
  4. // 请求地址
  5. curl_setopt($ch, CURLOPT_URL, $url);
  6. // 请求参数类型
  7. $param = $contentType == 'json' ? json_encode($param) : http_build_query($param);
  8. // 关闭https验证
  9. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  10. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  11. // post提交
  12. if($param){
  13. curl_setopt($ch, CURLOPT_POST, 1);
  14. curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
  15. }
  16. // 返回的数据是否自动显示
  17. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  18. // 执行并接收响应结果
  19. $output = curl_exec($ch);
  20. // 关闭curl
  21. curl_close($ch);
  22. return $output !== false ? $output : false;
  23. }

继续升级

  1. // 获取太阳码
  2. public function get_xcx_code() {
  3. $uid = $_POST['uid'];
  4. if (!$uid) {
  5. $this->json->setErr('10001', '缺少参数');
  6. $this->json->Send();
  7. }
  8. // 查看是否已存储到数据库
  9. $user_suncode_model = M('user_suncode');
  10. $user_suncode_info = $user_suncode_model->where(['uid'=>$uid])->find();
  11. if ($user_suncode_info) {
  12. $this->json->setErr(0, '获取成功');
  13. $this->json->setAttr('data',$user_suncode_info['code_imgurl']);
  14. $this->json->Send();
  15. }
  16. // 获取用户信息
  17. $user_model = M('user');
  18. $user_info = $user_model->where(['id'=>$uid])->find();
  19. if (!$user_info) {
  20. $this->json->setErr('10002', '用户不存在');
  21. $this->json->Send();
  22. }
  23. $scene = $user_info['invite_code'];
  24. vendor('Func.Http');
  25. $request_data = [
  26. 'scene' => $scene,
  27. 'page' => "pages/home/index",
  28. ];
  29. $request_url='https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$this->get_access_token();
  30. $result = Http::doPostJson($request_url,$request_data);
  31. // 存入cdn
  32. $cdn_result = $this->upload_cdn($result,'suncode');
  33. if ($cdn_result['errno'] == 0) {
  34. // 存入数据库
  35. $add_data = [
  36. 'uid' => $uid,
  37. 'code_imgurl' => $cdn_result['save_name'],
  38. 'addtime' => time()
  39. ];
  40. $user_suncode_model = M('user_suncode');
  41. $user_suncode_model->add($add_data);
  42. $this->json->setErr(0, '获取成功');
  43. $this->json->setAttr('data',$cdn_result['save_name']);
  44. $this->json->Send();
  45. } else {
  46. $this->json->setErr(10099, '获取失败');
  47. $this->json->Send();
  48. }
  49. }

cdn函数

  1. public function upload_cdn($img_result,$folders="common"){
  2. $date_folders = date('Ymd',time());
  3. $savePath = "site_upload/".$folders.'/'.$date_folders.'/';// 设置附件上传目录
  4. if (!is_dir($savePath)){
  5. @mkdir('./'.$savePath, 0777,true);
  6. }
  7. $file_name = time().'_'.mt_rand().".png";
  8. $upload_flag = file_put_contents($savePath.$file_name,$img_result);
  9. if($upload_flag){
  10. vendor('Qiniu.Qiniu');
  11. $qiniu = new Qiniu();
  12. $img = C('SF_HOST'). $savePath . $file_name;
  13. $ext = pathinfo($img, PATHINFO_EXTENSION);
  14. $name = time() . mt_rand() . '.' . $ext;
  15. $s = $qiniu->up($img, $name, C('QINIU.BUCKET'));
  16. if($s){
  17. @unlink('./'.$savePath . $file_name);
  18. $res['errno']='0';
  19. $res['errmsg']='ok';
  20. $res['save_name'] = C('CDN.URI') . $name;
  21. }else{
  22. @unlink('./' .$savePath . $file_name);
  23. $res['errno']='10001';
  24. $res['errmsg']='上传cdn失败';
  25. }
  26. }else{
  27. $res['errno']='10002';
  28. $res['errmsg']='上传图片失败';
  29. }
  30. return $res;
  31. }

微信小程序生成太阳码的更多相关文章

  1. 复用微信小程序源码包后仍然有原小程序的版本管理怎么处理

    前言: 复用微信小程序源码包后,重新创建项目导入源码包,会发现开发者工具版本管理中仍然有原来小程序的版本,这样就不太好了.毕竟是一个新的小程序,需要有新的版本控制的.那么这个问题怎么处理呢? 解决方案 ...

  2. 反编译获取线上任何微信小程序源码(转)

    看到人家上线的小程序的效果,纯靠推测,部分效果在绞尽脑汁后能做出大致的实现,但是有些细节,费劲全力都没能做出来.很想一窥源码?查看究竟?看看大厂的前端大神们是如何规避了小程序的各种奇葩的坑?那么赶紧来 ...

  3. 【转】精选十二款餐饮、快递、票务行业微信小程序源码demo推荐

    微信小程序的初衷是为了线下实体业服务的,必须有实体相结合才能显示小程序的魅力.个人认为微信小程序对于餐饮业和快递业这样业务比较单一的行业比较有市场,故整理推荐12款餐饮业和快递业微信小程序源码demo ...

  4. 【转】反编译获取任何微信小程序源码(完)

    一.前言最近在学习微信小程序开发,半个月学习下来,很想实战一下踩踩坑,于是就仿写了一个阿里妈妈淘宝客小程序的前端实现,过程一言难尽,差不多两周时间过去了,发现小程序的坑远比想象的要多的多!!在实际练手 ...

  5. 转载:微信小程序源码提取反编译

    转载来源:www.51xuediannao.com/xiaochengxu/019c08cc.html 一.前言 微信小程序源码提取反编译,听起来很屌,其实还是简单的,基本是傻瓜式操作.要想拿到微信小 ...

  6. 如何找回微信小程序源码?2020年微信小程序反编译最新教程 小宇子李

    前言:在网上看了找回微信小程序源码很多教程,都没法正常使用.微信版本升级后,会遇到各种报错, 以及无法获取到wxss的问题.查阅各种资料,最终解决,于是贴上完整的微信小程序反编译方案与教程. 本文章仅 ...

  7. 别错过了,130+个微信小程序源码 “限时分享“

    ​里面有130+款微信小程序源码和效果图,我只放了其中几款小程序的截图,具体请看下方图片 ​ ​ ​ ​ ​ ​ ​ ​ 仿网易云音乐小程序源码 链接:https://pan.baidu.com/s/ ...

  8. 微信小程序生成带参数的二维码 小程序二维码

    我是用php写的 先按照要求生成accesstoken $tokenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=clien ...

  9. 微信小程序生成二维码

    微信小程序客户端生成二维码的方法, 请参考这里: https://github.com/demi520/wxapp-qrcode  代码片段如下: const QR = require(". ...

随机推荐

  1. 构造函数=default表示什么?

    myClass()=default;//表示默认存在构造函数

  2. spring3: AOP 之代理机制

    Spring AOP通过代理模式实现,目前支持两种代理:JDK动态代理.CGLIB代理来创建AOP代理,Spring建议优先使用JDK动态代理. JDK动态代理:使用java.lang.reflect ...

  3. Win7性能选项

    1. 性能选项:只保留勾选下面的即可. 2. 隐藏explorer导航栏的“库”列表 HKEY_CLASSES_ROOT\CLSID\{031E4825-7B94-4dc3-B131-E946B44C ...

  4. Springboot项目打成war包,部署到tomcat上,正常启动访问报错404

    前言: 项目介绍,此项目是一个Maven多模块项目,模块项目:all(父模块):util (公用的工具类):dao(实体类.业务类.mapper.mapper.xml):business(业务serv ...

  5. sizeof结构体

    规则1:结构体的对折长度为其基本数据成员的长度的最大值. 规则2:指定边界情况下,结构体的对折长度为自身对折长度和指定对折长度中较小者. 规则3:当行内结构体的基本数据成员的起始地址必须为其长度的整数 ...

  6. 【spark】示例:求极值

    我们有这样的数据 1.建立SparkContext读取数据 (1)建立sc (2)通过sc.textFile()读取数据创建Rdd 2.过滤数据 通过filter(line => line.tr ...

  7. Agilent RF fundamentals (10) Mixer ,Phase domain and modulator

    1 Mixer characterization DC input Bias voltage Bias Current RF input Lo input IF output 2 mixer devi ...

  8. 机器学习算法实现解析——libFM之libFM的训练过程之SGD的方法

    本节主要介绍的是libFM源码分析的第五部分之一--libFM的训练过程之SGD的方法. 5.1.基于梯度的模型训练方法 在libFM中,提供了两大类的模型训练方法,一类是基于梯度的训练方法,另一类是 ...

  9. InpOut32 InputTest.cpp hacking

    /************************************************************************************ * InpOut32 Inp ...

  10. 怎么把openrety 里边的 table 优雅的打印出来

    1.安装 loarocks 库以后 2.安装 Penlight 插件 3.如下图所示 4.利用dump 函数优雅的打印 table