微信html5线上卡券,16.7.1HTML5网页领取卡券
HTML5中领取卡券是微信JS SDK接口的一个功能。在生成卡券ID之后,将其传入到HTML5页面中,再使用JS SDK接口来进行领取。
首先定义微信jssdk的类文件<?PHP
/*
方倍工作室 http://www.fangbei.org/
CopyRight 2014 All Rights Reserved
*/
/*
require_once('weixin.class.php');
$weixin = new class_weixin();
*/
header("Content-type: text/html; charset=utf-8");
define('APPID', "wx6bf29f1cb0633d2f");
define('APPSECRET', "");
class class_weixin
{
var $appid = APPID;
var $appsecret = APPSECRET;
//构造函数,获取Access Token
public function __construct($appid = NULL, $appsecret = NULL)
{
if($appid && $appsecret){
$this->appid = $appid;
$this->appsecret = $appsecret;
}
//3. 本地写入
$res = file_get_contents('access_token.json');
$result = json_decode($res, true);
$this->expires_time = $result["expires_time"];
$this->access_token = $result["access_token"];
if (time() > ($this->expires_time + 3600)){
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret;
$res = $this->http_request($url);
$result = json_decode($res, true);
$this->access_token = $result["access_token"];
$this->expires_time = time();
file_put_contents('access_token.json', '{"access_token": "'.$this->access_token.'", "expires_time": '.$this->expires_time.'}');
}
}
/*
* PART4 JS SDK 签名
* PHP仅用于获得签名包,需要配合js一起使用
*/
// require_once('weixin.class.php');
// $weixin = new class_weixin();
// $signPackage = $weixin->GetSignPackage();
//生成长度16的随机字符串
public function createNonceStr($length = 16) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$str = "";
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
//获得微信卡券api_ticket
public function getCardApiTicket()
{
//2. 写文件,有改动,待测试 20150430
$res = file_get_contents('cardapi_ticket.json');
$result = json_decode($res, true);
$this->cardapi_ticket = $result["cardapi_ticket"];
$this->cardapi_expire = $result["cardapi_expire"];
if (time() > ($this->cardapi_expire + 3600)){
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=wx_card&access_token=".$this->access_token;
$res = $this->http_request($url);
$result = json_decode($res, true);
$this->cardapi_ticket = $result["ticket"];
$this->cardapi_expire = time();
file_put_contents('cardapi_ticket.json', '{"cardapi_ticket": "'.$this->cardapi_ticket.'", "cardapi_expire": '.$this->cardapi_expire.'}');
}
return $this->cardapi_ticket;
}
//cardSign卡券签名
/*
$obj['api_ticket'] = "ojZ8YtyVyr30HheH3CM73y";
$obj['timestamp'] = "1404896688";
$obj['nonce_str'] = "jonyqin";
$obj['card_id'] = "pjZ8Yt1XGILfi-FUsewpnnolGgZk";
$signature = get_cardsign($obj);
*/
public function get_cardsign($bizObj)
{
//字典序排序
asort($bizObj);
//URL键值对拼成字符串
$buff = "";
foreach ($bizObj as $k => $v){
$buff .= $v;
}
//sha1签名
return sha1($buff);
}
//获得JS API的ticket
private function getJsApiTicket()
{
//2. 写文件,有改动,待测试 20150430
$res = file_get_contents('jsapi_ticket.json');
$result = json_decode($res, true);
$this->jsapi_ticket = $result["jsapi_ticket"];
$this->jsapi_expire = $result["jsapi_expire"];
if (time() > ($this->jsapi_expire + 3600)){
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".$this->access_token;
$res = $this->http_request($url);
$result = json_decode($res, true);
$this->jsapi_ticket = $result["ticket"];
$this->jsapi_expire = time();
file_put_contents('jsapi_ticket.json', '{"jsapi_ticket": "'.$this->jsapi_ticket.'", "jsapi_expire": '.$this->jsapi_expire.'}');
}
return $this->jsapi_ticket;
}
//获得签名包
public function getSignPackage() {
$jsapiTicket = $this->getJsApiTicket();
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url = "$protocol".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].((empty($_SERVER['QUERY_STRING']))?"":("?".$_SERVER['QUERY_STRING']));
$timestamp = time();
$nonceStr = $this->createNonceStr();
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
$signature = sha1($string);
$signPackage = array(
"appId" => $this->appid,
"nonceStr" => $nonceStr,
"timestamp" => $timestamp,
"url" => $url,
"signature" => $signature,
"rawString" => $string
);
return $signPackage;
}
//HTTP请求(支持HTTP/HTTPS,支持GET/POST)
protected function http_request($url, $data = null)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
//日志记录
private function logger($log_content)
{
if(isset($_SERVER['HTTP_APPNAME'])){ //SAE
sae_set_display_errors(false);
sae_debug($log_content);
sae_set_display_errors(true);
}else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL
$max_size = 500000;
$log_filename = "log.XML";
if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
file_put_contents($log_filename, date('Y-m-d H:i:s').$log_content."\r\n", FILE_APPEND);
}
}
}
HTML5领取卡券的代码如下所示。1 <?php
2 require_once('wxjssdk.class.php');
3 $weixin = new class_weixin();
4 $signPackage = $weixin->GetSignPackage();
5 $cardapi_ticket = $weixin->getCardApiTicket();
6
7 $card_id = "piPuduN0wOytmRlSyeNJQToE7BIU";
8 $obj['api_ticket'] = $cardapi_ticket;
9 $obj['timestamp'] = strval(time());
10 $obj['nonce_str'] = $weixin->createNonceStr();
11 $obj['card_id'] = $card_id;
12 $signature = $weixin->get_cardsign($obj);
13
14 ?>
15
16
17
18
19
20
21
22
微信
23
24
25
26
27
微信卡券接口
28 批量添加卡券接口
29 addCard
30
31
32
33 wx.config({
34 debug: false,
35 appId: '<?php echo $signPackage["appId"];?>',
36 timestamp: <?php echo $signPackage["timestamp"];?>,
37 nonceStr: '<?php echo $signPackage["nonceStr"];?>',
38 signature: '<?php echo $signPackage["signature"];?>',
39 // url:'<?php echo $signPackage["url"];?>',
40 jsApiList: [
41 'addCard',
42 ]
43 });
44
45
46 wx.ready(function () {
47 //自动执行的
48 wx.checkJsApi({
49 jsApiList: [
50 'addCard',
51 ],
52 success: function (res) {
53 // alert(JSON.stringify(res));
54 }
55 });
56
57 document.querySelector('#addCard').onclick = function () {
58 wx.addCard({
59 cardList: [
60 {
61 cardId: '<?php echo $obj['card_id'];?>',
62 cardExt: '{"code":"","openid":"","nonce_str":"<?php echo $obj['nonce_str']?>" ,"timestamp": "<?php echo $obj['timestamp'];?>", "signature":"<?php echo $signature;?>"}'
63 }
64 ],
65 success: function (res) {
66 alert('已添加卡券:' + JSON.stringify(res.cardList));
67 },
68 cancel: function (res) {
69 alert(JSON.stringify(res))
70 }
71 });
72 };
73 });
74
75 wx.error(function (res) {
76 alert(res.errMsg);
77 });
78
79
上述代码中,需要注意的地方是卡券的签名部分,读者可以参考微信JS SDK一节的代码实现。
微信html5线上卡券,16.7.1HTML5网页领取卡券相关推荐
- 微信 日志服务器 并发大,微信高性能线上日志系统xlog剖析
微信高性能线上日志系统xlog剖析 做移动开发的同学经常会遇到一个头疼的问题,就是当用户反馈一些问题,又比较冷僻难以复现的时候(不是Crash),常常就会陷入一筹莫展的境地.因此,很多人就研发了相关的 ...
- JAVA调用微信投放卡券——HTML5线上发券(JS-SDK接口)
第一:需要一张微信公众平台创建好了的卡券(注意:卡券有效期和库存) 第二:获取微信 "api_ticket" 获取的接口是url="https://api.weixin. ...
- matlab数字图像处理大作业_线上教学优秀案例(16) | 数字图像处理基于蓝墨云+企业微信的线上教学经验分享...
[前言]目前我校在线课堂教学如火如荼,老师们在各大教学平台化身"直播高手""网课达人"倾心打造精彩课堂,有效保证了在线学习与线下课堂教学质量实质等效.为进一步推 ...
- 支付宝,微信,线上支付流程介绍
这篇文章中我们介绍下目前中国市场线上支付主流的形式及流程 支付宝支付系统交互流程: 微信支付系统交互流程: 在我们写支付相关功能时,其实最主要的就是理解如上的两张图,我们可以把它们大致简化为: 商户服 ...
- 实例:用C#.NET手把手教你做微信公众号开发(20)--使用微信支付线上收款:jsapi方式
在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下jsapi支付,场景就是在微信内打开某个页面,完成在线支付,同样一个网页,使用微信打开就是js ...
- 实例:用C#.NET手把手教你做微信公众号开发(21)--使用微信支付线上收款:H5方式
在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下H5场景支付,使用手机浏览器打开就是H5方式,最常见的推广是短信内置链接,这种场景需要调用微信 ...
- 视频教程-线上培训上课实录整站设计制作开发全能培训-HTML5/CSS
线上培训上课实录整站设计制作开发全能培训 粉丝已经近2万人.传课网业余讲师. 彭亮 ¥39.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠,最 ...
- ssm基于微信小程序的食堂线上预约点餐系统--(ssm+uinapp+Mysql)
ssm基于微信小程序的食堂线上预约点餐系统–(ssm+uinapp+Mysql) 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括食堂线上预约点餐系统的网络应用,在外 ...
- 微信公众号线上和线下增粉秘籍:
微信公众号线上和线下增粉秘籍: 线上方法: 1.客户下单之后,短信提醒客户已发货,并关注微信***,回复**,可获得**. 2.短信群发引导关注,关注有礼.关注玩游戏有奖.关注即送优惠券等等方式. ...
- 微信小程序直播助力深圳线上购物节 数百场品牌小程序开播
3月8日消息,自2月下旬微信宣布小程序直播能力公测以来,零售商家在复工复产关键时期纷纷"入局"小程序直播.微信发布消息称,3月8日"女神节"当天,数百个品牌将同 ...
最新文章
- 传统数据仓库架构与Hadoop的区别
- Selenium3自动化测试——21.数据驱动应用
- Unity SRP自定义渲染管线 -- 1.Custom Pipeline
- jquery live hover绑定方法
- listen(int fd, int backlog)中的backlog含义
- java filter 回调_Java 异步回调机制实例分析
- Quartz配置文件详解生产配置
- 如何理解P40采用RYYB比RGGB的感光能力提升40%
- 程序员阶段性成长的自我总结
- 10/13 Total variation loss 全变分
- 波士顿房价预测(线性回归、岭回归、决策树)
- 几种x-ray产生的原理
- 【flutter】上架马甲包过审
- 手把手教你如何在AWS EC2 启用 IPv6
- AGV自动导航控制系统
- 软件测试-自我介绍-整体框架
- linux lib.a反编译,android反编译-smali文件语法
- visio双线方框怎么画_visio2013画流程图怎么操作?|visio2013专业版画流程图的方法...
- .htaccess中的apache rewrite规则写法详解
- C++day06 虚析构函数