微信小程序生成太阳码
微信小程序生成太阳码
https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=access_token
必须通过POST提交
而且参数必须是JSON的格式
<?php
/**
* curl请求数据
*
* @param string $url 请求地址
* @param array $param 请求参数
* @param string $contentType 请求参数格式(json)
* @return boolean|mixed
*/
function https_request($url = '', $param = [], $contentType = ''){
$ch = curl_init();
// 请求地址
curl_setopt($ch, CURLOPT_URL, $url);
// 请求参数类型
$param = $contentType == 'json' ? json_encode($param) : $param;
// 关闭https验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// post提交
if($param){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
}
// 返回的数据是否自动显示
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 执行并接收响应结果
$output = curl_exec($ch);
// 关闭curl
curl_close($ch);
return $output !== false ? $output : false;
}
$access_token="10_X1w4ypXMdfliiv4orym7n7Ur8UMV3LsPAyyBng-DOjcZfAW1mlfKb1BAvBQuBIMUvk_Bq2lv3E2TI8QLvTrnmy1TBxoDeXu_JvR_sobPBkUimmA-aNasktu-J6UWLCgAAAFUL";
$request_url='https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$access_token;
$request_data=array(
'scene'=>'abcdef',
'page'=>'pages/home/index',
'width'=>'690'
);
print_r(https_request($request_url,$request_data,'json'));
这里有几点需要注意,page参数中的值一定要是小程序中存在的。
这里的access_token是用小程序的Appid和AppSecret生成的。之前还傻乎乎的去开启公众号的APPSecret。
再一个,这里返回的数据,不是JSON数据,而是二维码图片数据。
如何通过postman操作呢?

万能的POSTMAN啊。
{"page":"pages/home/index","scene":"abcdef","width":690}
封装
封装接口
// 获取太阳码
public function get_xcx_code() {
$uid = $_POST['uid'];
if (!$uid) {
$this->json->setErr('10001', '缺少参数');
$this->json->Send();
}
// 获取用户信息
$user_model = M('user');
$user_info = $user_model->where(['id'=>$uid])->find();
if (!$user_info) {
$this->json->setErr('10002', '用户不存在');
$this->json->Send();
}
$scene = $user_info['invite_code'];
vendor('Func.Http');
$request_data = [
'scene' => $scene,
'page' => "pages/home/index",
'width' => 690
];
$request_url='https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$this->get_access_token();
$result = Http::doPostJson($request_url,$request_data);
header('Content-Type: image/jpeg; charset=UTF-8');
echo $result;exit;
}
处理成base64
// 获取太阳码
public function get_xcx_code() {
$uid = $_POST['uid'];
if (!$uid) {
$this->json->setErr('10001', '缺少参数');
$this->json->Send();
}
// 获取用户信息
$user_model = M('user');
$user_info = $user_model->where(['id'=>$uid])->find();
if (!$user_info) {
$this->json->setErr('10002', '用户不存在');
$this->json->Send();
}
$scene = $user_info['invite_code'];
vendor('Func.Http');
$request_data = [
'scene' => $scene,
'page' => "pages/home/index",
// 'width' => 690
];
$request_url='https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$this->get_access_token();
$result = Http::doPostJson($request_url,$request_data);
// ob_clean();
// header('Content-Type: image/png; charset=UTF-8');
// echo $result;exit;
$this->json->setErr(0, '获取成功');
$this->json->setAttr('data',base64_encode($result));
$this->json->Send();
}
封装post请求
// 通过POST方式发送json数据
static public function doPostJson($url = '', $param = [] ,$contentType = 'json') {
$ch = curl_init();
// 请求地址
curl_setopt($ch, CURLOPT_URL, $url);
// 请求参数类型
$param = $contentType == 'json' ? json_encode($param) : http_build_query($param);
// 关闭https验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// post提交
if($param){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
}
// 返回的数据是否自动显示
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 执行并接收响应结果
$output = curl_exec($ch);
// 关闭curl
curl_close($ch);
return $output !== false ? $output : false;
}
继续升级
// 获取太阳码
public function get_xcx_code() {
$uid = $_POST['uid'];
if (!$uid) {
$this->json->setErr('10001', '缺少参数');
$this->json->Send();
}
// 查看是否已存储到数据库
$user_suncode_model = M('user_suncode');
$user_suncode_info = $user_suncode_model->where(['uid'=>$uid])->find();
if ($user_suncode_info) {
$this->json->setErr(0, '获取成功');
$this->json->setAttr('data',$user_suncode_info['code_imgurl']);
$this->json->Send();
}
// 获取用户信息
$user_model = M('user');
$user_info = $user_model->where(['id'=>$uid])->find();
if (!$user_info) {
$this->json->setErr('10002', '用户不存在');
$this->json->Send();
}
$scene = $user_info['invite_code'];
vendor('Func.Http');
$request_data = [
'scene' => $scene,
'page' => "pages/home/index",
];
$request_url='https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$this->get_access_token();
$result = Http::doPostJson($request_url,$request_data);
// 存入cdn
$cdn_result = $this->upload_cdn($result,'suncode');
if ($cdn_result['errno'] == 0) {
// 存入数据库
$add_data = [
'uid' => $uid,
'code_imgurl' => $cdn_result['save_name'],
'addtime' => time()
];
$user_suncode_model = M('user_suncode');
$user_suncode_model->add($add_data);
$this->json->setErr(0, '获取成功');
$this->json->setAttr('data',$cdn_result['save_name']);
$this->json->Send();
} else {
$this->json->setErr(10099, '获取失败');
$this->json->Send();
}
}
cdn函数
public function upload_cdn($img_result,$folders="common"){
$date_folders = date('Ymd',time());
$savePath = "site_upload/".$folders.'/'.$date_folders.'/';// 设置附件上传目录
if (!is_dir($savePath)){
@mkdir('./'.$savePath, 0777,true);
}
$file_name = time().'_'.mt_rand().".png";
$upload_flag = file_put_contents($savePath.$file_name,$img_result);
if($upload_flag){
vendor('Qiniu.Qiniu');
$qiniu = new Qiniu();
$img = C('SF_HOST'). $savePath . $file_name;
$ext = pathinfo($img, PATHINFO_EXTENSION);
$name = time() . mt_rand() . '.' . $ext;
$s = $qiniu->up($img, $name, C('QINIU.BUCKET'));
if($s){
@unlink('./'.$savePath . $file_name);
$res['errno']='0';
$res['errmsg']='ok';
$res['save_name'] = C('CDN.URI') . $name;
}else{
@unlink('./' .$savePath . $file_name);
$res['errno']='10001';
$res['errmsg']='上传cdn失败';
}
}else{
$res['errno']='10002';
$res['errmsg']='上传图片失败';
}
return $res;
}
微信小程序生成太阳码的更多相关文章
- 复用微信小程序源码包后仍然有原小程序的版本管理怎么处理
前言: 复用微信小程序源码包后,重新创建项目导入源码包,会发现开发者工具版本管理中仍然有原来小程序的版本,这样就不太好了.毕竟是一个新的小程序,需要有新的版本控制的.那么这个问题怎么处理呢? 解决方案 ...
- 反编译获取线上任何微信小程序源码(转)
看到人家上线的小程序的效果,纯靠推测,部分效果在绞尽脑汁后能做出大致的实现,但是有些细节,费劲全力都没能做出来.很想一窥源码?查看究竟?看看大厂的前端大神们是如何规避了小程序的各种奇葩的坑?那么赶紧来 ...
- 【转】精选十二款餐饮、快递、票务行业微信小程序源码demo推荐
微信小程序的初衷是为了线下实体业服务的,必须有实体相结合才能显示小程序的魅力.个人认为微信小程序对于餐饮业和快递业这样业务比较单一的行业比较有市场,故整理推荐12款餐饮业和快递业微信小程序源码demo ...
- 【转】反编译获取任何微信小程序源码(完)
一.前言最近在学习微信小程序开发,半个月学习下来,很想实战一下踩踩坑,于是就仿写了一个阿里妈妈淘宝客小程序的前端实现,过程一言难尽,差不多两周时间过去了,发现小程序的坑远比想象的要多的多!!在实际练手 ...
- 转载:微信小程序源码提取反编译
转载来源:www.51xuediannao.com/xiaochengxu/019c08cc.html 一.前言 微信小程序源码提取反编译,听起来很屌,其实还是简单的,基本是傻瓜式操作.要想拿到微信小 ...
- 如何找回微信小程序源码?2020年微信小程序反编译最新教程 小宇子李
前言:在网上看了找回微信小程序源码很多教程,都没法正常使用.微信版本升级后,会遇到各种报错, 以及无法获取到wxss的问题.查阅各种资料,最终解决,于是贴上完整的微信小程序反编译方案与教程. 本文章仅 ...
- 别错过了,130+个微信小程序源码 “限时分享“
里面有130+款微信小程序源码和效果图,我只放了其中几款小程序的截图,具体请看下方图片 仿网易云音乐小程序源码 链接:https://pan.baidu.com/s/ ...
- 微信小程序生成带参数的二维码 小程序二维码
我是用php写的 先按照要求生成accesstoken $tokenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=clien ...
- 微信小程序生成二维码
微信小程序客户端生成二维码的方法, 请参考这里: https://github.com/demi520/wxapp-qrcode 代码片段如下: const QR = require(". ...
随机推荐
- SQLite 插入大量数据慢的解决方法
sqlite 插入数据很慢的原因:sqlite在没有显式使用事务的时候会为每条insert都使用事务操作,而sqlite数据库是以文件的形式存在磁盘中,就相当于每次访问时都要打开一次文件,如果对数据进 ...
- MFC--串口编程---WIN API的方式将串扣操作封装在线程类中
串口采集数据 本文档介绍的是如何获取串口原始数据并将原始数据解析成可处理或可展示的数据. 一.串口采集有很多方式: 1).MFC有一个专门的控件,直接编程采集,一个控件只能采集一个串口,而且串口名字比 ...
- php:Mcrypt响应慢的原因解决备注
作者: Laruence 本文地址: http://www.laruence.com/2012/09/24/2810.html 转载请注明出处 上午的时候, 有同事来找我说上周新上线的一个使用mcry ...
- python脚本5_求素数
#求素数 #素数:只能被1和它自己整除 n = int(input('Please input a number >>>')) flag = False for i in range ...
- Prism初研究之使用Prism实现WPF的MVVM模式
转自:http://www.cnblogs.com/qianzi067/p/5804880.html
- python 邮件发送实例
#!/usr/bin/env python # -*- coding: utf-8 -*- from email.header import Header from email.mime.text i ...
- 更改当前启动项,开关Hyper-V
switch-HyperV.bat @echo off "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\ ...
- Mac环境下Android Studio配置Git以及最基本使用
Git是分布式版本管理工具,现在使用十分广泛,相对于SVN,GIT的使用更加方便,在离线环境下,仍然可以进行版本控制工作.且速度十分快.在Windows下,先需要自行安装Git程序,网址git-scm ...
- 【spark】RDD创建
首先我们要建立 sparkconf 配置文件,然后通过配置文件来建立sparkcontext. import org.apache.spark._ object MyRdd { def main(ar ...
- HDU 3452 Bonsai(树形dp)
Bonsai Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submis ...