2、后台代码:
<?php
header("Content-Type:text/html;charset=utf8");
header("Access-Control-Allow-Origin: *"); //解决跨域
header('Access-Control-Allow-Methods:POST'); // 响应类型
header('Access-Control-Allow-Headers:*'); // 响应头设置
$data = array();
$data['time'] = time();
$data['appid'] = 'XXX'; //appid
$data['secret'] = 'XXX'; //secret
$res = file_get_contents("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$data['appid']."&secret=".$data['secret']); //获得access_token
$ress = json_decode($res,True);
$access_token = $ress['access_token'];// 取出 至于存储代码就不列举了
$js = file_get_contents("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi");
$jss = json_decode($js,True);
$jsapi_ticket = $jss['ticket'];// 取出JS凭证, 至于存储代码就不列举了
//开始签名算法了
$sign = array();
$sign['noncestr'] = 'W99WZY08z0wzcjjkl'; //随意字符串 一会要传到JS里去.要求一致
$sign['jsapi_ticket'] = $jsapi_ticket;
$sign['timestamp'] = $data['time'];
$sign['url'] = $_POST['url'];//获取URL
ksort($sign);
$signature = '';
foreach($sign as $k => $v){
$signature .= $k.'='.$v.'&';
}
$signature = substr($signature, 0, strlen($signature)-1);
$data['signature'] = sha1($signature);// 必填,签名,见附录1
$data['nonceStr'] = $sign['noncestr'];
$response = array('code' => 0, 'message' => '请求成功', 'data' => $data);
echo json_encode($response);
3、前端代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>分享页面标题XXX</title>
<script src='https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js'></script>
<script src="http://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
</head>
<body>
<button onclick="create_code()">生成二维码</button>
<img id="code" src="" alt="" style="display: none;">
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
type:"POST",
url:'wxshare.php',
data: {url: window.location.href},
success:function(result){
var result = JSON.parse(result);
// console.log(result);
// 检测是否拥有权限
// wx.checkJsApi({
// jsApiList: ['updateAppMessageShareData'], // 需要检测的 JS 接口列表,所有 JS 接口列表见附录2,
// success: function(res) {
// alert(JSON.stringify(res));
// }
// });
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: result.data.appid, // 必填,公众号的唯一标识
timestamp: result.data.time, // 必填,生成签名的时间戳
nonceStr: result.data.nonceStr, // 必填,生成签名的随机串
signature: result.data.signature,// 必填,签名,见附录1
jsApiList: ['updateAppMessageShareData'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
wx.ready(function(){
wx.updateAppMessageShareData({
title: '分享页面标题XXX', // 分享标题
desc: '分享页面描述XXX', // 分享描述
link: 'http://www.域名.com/xs/index.html', // 分享链接,该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致
imgUrl: 'http://www.域名.com/xs/static/logo.png', // 分享图标
// success: function () {
// alert('分享成功');
// },
// cancel: function () {
// alert('取消分享了');
// }
});
});
}
});
});
// 生成二维码
function create_code(){
$.ajax({
type:"POST",
url:'create_code.php',
data: {url: window.location.href},
success:function(result){
$('#code').attr('src',result);
$('#code').show();
}
});
}
</script>
<script>
</script>
</body>
</html>
<?php
header("Content-Type:text/html;charset=utf8");
header("Access-Control-Allow-Origin: *"); //解决跨域
header('Access-Control-Allow-Methods:POST'); // 响应类型
header('Access-Control-Allow-Headers:*'); // 响应头设置
include 'phpqrcode/phpqrcode.php';
$value = $_POST['url']; //二维码内容
$errorCorrectionLevel = 'L';//容错级别
$matrixPointSize = 6;//生成图片大小
//生成二维码图片
$filename = 'phpqrcode/qrcodeimgs/'.time().'.png';
QRcode::png($value, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
echo 'http://www.域名.com/xs/'.$filename;
效果图:

上面4步都设置好之后,首先需要把要分享的页面生成二维码(点击页面生成二维码按钮即可),然后用微信扫一扫二维码进入页面后,点击右上角三个点分享给朋友既可看到自定义的卡片效果;
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我有一张背景图片,我想在其中添加一个文本框。我想弄清楚如何将标题放置在其顶部的正确位置。(我使用标题是因为我需要自动换行功能)。现在,我只能让文本显示在左上角,但我需要能够手动定位它的开始位置。require'RMagick'require'Pry'includeMagicktext="Loremipsumdolorsitamet"img=ImageList.new('template001.jpg')img 最佳答案 这是使用convert的ImageMagick命令行的答案。如果你想在Rmagick中使用这个方法,你必须自己移植
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano
我使用Ember作为我的前端和GrapeAPI来为我的API提供服务。前端发送类似:{"service"=>{"name"=>"Name","duration"=>"30","user"=>nil,"organization"=>"org","category"=>nil,"description"=>"description","disabled"=>true,"color"=>nil,"availabilities"=>[{"day"=>"Saturday","enabled"=>false,"timeSlots"=>[{"startAt"=>"09:00AM","endAt"=>
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是