php生成微信小程序二维码源码
目前有3个接口可以生成小程序码,开发者可以根据自己的需要选择合适的接口。
第一步:获取 access_token
- public function getWxAccessToken(){
- $appid='wxbcfaa005da7b16**';
- $appsecret='****';
- if(Session::get('access_token_'.$appid) && Session::get('expire_time_'.$appid)>time()){
- return Session::get('access_token_'.$appid);
- }else{
- $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
- $access_token = $this->makeRequest($url);
- $access_token = json_decode($access_token['result'],true);
- Session::set('access_token_'.$appid,$access_token);
- Session::set('expire_time_'.$appid,time()+7000);
- return $access_token;
- }
- }
- /**
- * 发起http请求
- * @param string $url 访问路径
- * @param array $params 参数,该数组多于1个,表示为POST
- * @param int $expire 请求超时时间
- * @param array $extend 请求伪造包头参数
- * @param string $hostIp HOST的地址
- * @return array 返回的为一个请求状态,一个内容
- */
- public function makeRequest($url, $params = array(), $expire = 0, $extend = array(), $hostIp = '')
- {
- if (empty($url)) {
- return array('code' => '100');
- }
- $_curl = curl_init();
- $_header = array(
- 'Accept-Language: zh-CN',
- 'Connection: Keep-Alive',
- 'Cache-Control: no-cache'
- );
- // 方便直接访问要设置host的地址
- if (!empty($hostIp)) {
- $urlInfo = parse_url($url);
- if (empty($urlInfo['host'])) {
- $urlInfo['host'] = substr(DOMAIN, 7, -1);
- $url = "http://{$hostIp}{$url}";
- } else {
- $url = str_replace($urlInfo['host'], $hostIp, $url);
- }
- $_header[] = "Host: {$urlInfo['host']}";
- }
- // 只要第二个参数传了值之后,就是POST的
- if (!empty($params)) {
- curl_setopt($_curl, CURLOPT_POSTFIELDS, http_build_query($params));
- curl_setopt($_curl, CURLOPT_POST, true);
- }
- if (substr($url, 0, 8) == 'https://') {
- curl_setopt($_curl, CURLOPT_SSL_VERIFYPEER, FALSE);
- curl_setopt($_curl, CURLOPT_SSL_VERIFYHOST, FALSE);
- }
- curl_setopt($_curl, CURLOPT_URL, $url);
- curl_setopt($_curl, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($_curl, CURLOPT_USERAGENT, 'API PHP CURL');
- curl_setopt($_curl, CURLOPT_HTTPHEADER, $_header);
- if ($expire > 0) {
- curl_setopt($_curl, CURLOPT_TIMEOUT, $expire); // 处理超时时间
- curl_setopt($_curl, CURLOPT_CONNECTTIMEOUT, $expire); // 建立连接超时时间
- }
- // 额外的配置
- if (!empty($extend)) {
- curl_setopt_array($_curl, $extend);
- }
- $result['result'] = curl_exec($_curl);
- $result['code'] = curl_getinfo($_curl, CURLINFO_HTTP_CODE);
- $result['info'] = curl_getinfo($_curl);
- if ($result['result'] === false) {
- $result['result'] = curl_error($_curl);
- $result['code'] = -curl_errno($_curl);
- }
- curl_close($_curl);
- return $result;
- }
第二步:调用接口生成微信二维码(这里以接口B为例)
- public function getWxcode(){
- $ACCESS_TOKEN=$this->getWxAccessToken();
- $url="https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".$ACCESS_TOKEN['access_token'];
- $post_data=
- array(
- 'page'=>'pages/caregory/index',
- 'scene'=>'34,S853EE4QRP'//34%2CS853EE4QRP
- );
- $post_data=json_encode($post_data);
- $data=$this->send_post($url,$post_data);
- $result=$this->data_uri($data,'image/png');
- return '<image src='.$result.'></image>';
- }
- /**
- * 消息推送http
- * @param $url
- * @param $post_data
- * @return bool|string
- */
- protected function send_post( $url, $post_data ) {
- $options = array(
- 'http' => array(
- 'method' => 'POST',
- 'header' => 'Content-type:application/json',
- //header 需要设置为 JSON
- 'content' => $post_data,
- 'timeout' => 60
- //超时时间
- )
- );
- $context = stream_context_create( $options );
- $result = file_get_contents( $url, false, $context );
- return $result;
- }
- //二进制转图片image/png
- public function data_uri($contents, $mime)
- {
- $base64 = base64_encode($contents);
- return ('data:' . $mime . ';base64,' . $base64);
- }
接口A: 适用于需要的码数量较少的业务场景 接口地址:
https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN
参数如下:
注意:通过该接口生成的小程序码,永久有效,数量限制见文末说明,请谨慎使用。用户扫描该码进入小程序后,将直接进入 path 对应的页面。
接口B:适用于需要的码数量极多,或仅临时使用的业务场景:
https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
参数如下:
注意:通过该接口生成的小程序码,永久有效,数量暂无限制。用户扫描该码进入小程序后,开发者需在对应页面获取的码中 scene 字段的值,再做处理逻辑。使用如下代码可以获取到二维码中的 scene 字段的值。调试阶段可以使用开发工具的条件编译自定义参数 scene=xxxx 进行模拟,开发工具模拟时的 scene 的参数值需要进行 urlencode
- // 这是首页的 js
- Page({
- onLoad: function(options) {
- // options 中的 scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scene
- var scene = decodeURIComponent(options.scene)
- }
- })
接口C:适用于需要的码数量较少的业务场景:
https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN
参数如下:
注意:通过该接口生成的小程序二维码,永久有效,数量限制见文末说明,请谨慎使用。用户扫描该码进入小程序后,将直接进入 path 对应的页面。
php生成微信小程序二维码源码的更多相关文章
- Java 获取微信小程序二维码(可以指定小程序页面 与 动态参数)
一.准备工作 微信公众平台接口调试工具 小程序的唯一标识(appid) 小程序的密钥(secret) 二.获取access_token 打开微信公众平台接口调试工具,在参数列表中输入小程序的appid ...
- 图片的URL上传至阿里云OSS操作(微信小程序二维码返回的二进制上传到OSS)
当我们从网络中获取一个URL的图片我们要存储到本地或者是私有的云时,我们可以这样操作 把url中的图片文件下载到本地(或者上传到私有云中) public String uploadUrlToOss ...
- 基于olami开放语义平台的微信小程序遥知之源码实现
概述 实现一个智能生活信息查询的小秘书功能,支持查天气.新闻.日历.汇率.笑话.故事.百科.诗词.邮编.区号.菜谱.股票.节目预告,还支持闲聊.算24点.数学计算.单位换算.购物.搜索等功能. 使用方 ...
- 微信小程序二维码推广统计
微信小程序可以通过生成带参数的二维码,那么这个参数是可以通过APP的页面进行监控的 这样就可以统计每个二维码的推广效果. 今天由好推二维码推出的小程序统计工具HotApp小程序统计也推出了带参数二维码 ...
- 微信小程序-二维码汇总
小程序二维码在生活中的应用场景很多,比如营销类一物一码,扫码开门,扫码付款等...小程序二维码分两种? 1.普通链接二维码 即跟普通的网站链接生成的二维码是一个意思,这种二维码的局限性如下: 对于普通 ...
- .NET生成小程序码,并合自定义背景图生成推广小程序二维码
前言: 对于小程序大家可能都非常熟悉了,随着小程序的不断普及越来越多的公司都开始推广使用起来了.今天接到一个需求就是生成小程序码,并且于运营给的推广图片合并在一起做成一张漂亮美观的推广二维码,扫码这种 ...
- 微信小程序二维码是无法识别二维码跳转到小程序
今天测试了一下,微信小程序圆形二维码是不能直接识别跳转到小程序: 但h5页面的那种微信公众号二维码是可以直接识别
- 微信小程序支付C#后端源码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- 微信小程序二维码识别
目前市场上二维码识别的软件或者网站越来越多,可是真正方便,无广告的却少之很少. 于是,自己突发奇想做了一个微信二维码识别的小程序. 包含功能: 1.识别二维码 ①普通二维码 ②条形码 ③只是复制解析出 ...
随机推荐
- Hibernate课程 初探多对多映射2-1 创建数据库表
--创建表 -- 创建项目表 create table project( proid int(10) not null comment '项目Id', proname varchar(30) co ...
- jQuery 判断文本输入框的事件
1.实现以下需求: 输入框中输入内容,发表按钮变为蓝色背景,删除为空则变为原来的颜色 代码实现:通过判断event.target.value是否为空 2.input事件:文本输入框正在输入时生效 f ...
- ansible使用4-Playbook Roles and Include Statements
task include --- # possibly saved as tasks/foo.yml - name: placeholder foo command: /bin/foo - name: ...
- ES6相关特性(let & const)
[ecma-262/8.0]http://www.ecma-international.org/ecma-262/8.0/index.html 1.Let & const let 的三个特性: ...
- Python 类的高级属性(可选)
1.slots实例:限制类的实例有合法的属性集,只有__slots__属性列表中的属性才可能成为实例属性. 对象的实例通常没有一个属性字典,可以在__slots__列表中包含一个属性字典__dict_ ...
- DOM笔记(十三):JavaScript的继承方式
在Java.C++.C#等OO语言中,都支持两种继承方式:接口继承和实现继承.接口继承制继承方法签名,实现继承则继承实际的方法和属性.在SCMAScript中,由于函数没有签名,所以无法实现接口继承, ...
- TCP与虚连接
http://bbs.csdn.net/topics/390262738 在TCP通信时,会建立一个从源端到目的端的虚拟连接.感觉这种连接类似电路交换,只是这种连接是虚拟存在的.发送的报文都应该是沿着 ...
- Gym 100090M Jumping along the Hummocks
题意: 从 前往后跳,要么跳一步,跳到相邻的位置,要么跳到下一个数字相同的位置,求跳到最后的最少步数. dp,但是会tle,我用map优化了一下. #include <bits/stdc++.h ...
- 轻量级HTTP服务器Nginx(常用配置实例)
轻量级HTTP服务器Nginx(常用配置实例) 文章来源于南非蚂蚁 Nginx作为一个HTTP服务器,在功能实现方面和性能方面都表现得非常卓越,完全可以与Apache相媲美,几乎可以实现Apa ...
- 2018年第九届蓝桥杯【C++省赛B组】第三题 乘积尾零
如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零?5650 4542 3554 473 946 4114 3871 9073 90 43292758 7949 6113 5659 ...