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&timestamp=$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网页领取卡券相关推荐

  1. 微信 日志服务器 并发大,微信高性能线上日志系统xlog剖析

    微信高性能线上日志系统xlog剖析 做移动开发的同学经常会遇到一个头疼的问题,就是当用户反馈一些问题,又比较冷僻难以复现的时候(不是Crash),常常就会陷入一筹莫展的境地.因此,很多人就研发了相关的 ...

  2. JAVA调用微信投放卡券——HTML5线上发券(JS-SDK接口)

    第一:需要一张微信公众平台创建好了的卡券(注意:卡券有效期和库存) 第二:获取微信 "api_ticket" 获取的接口是url="https://api.weixin. ...

  3. matlab数字图像处理大作业_线上教学优秀案例(16) | 数字图像处理基于蓝墨云+企业微信的线上教学经验分享...

    [前言]目前我校在线课堂教学如火如荼,老师们在各大教学平台化身"直播高手""网课达人"倾心打造精彩课堂,有效保证了在线学习与线下课堂教学质量实质等效.为进一步推 ...

  4. 支付宝,微信,线上支付流程介绍

    这篇文章中我们介绍下目前中国市场线上支付主流的形式及流程 支付宝支付系统交互流程: 微信支付系统交互流程: 在我们写支付相关功能时,其实最主要的就是理解如上的两张图,我们可以把它们大致简化为: 商户服 ...

  5. 实例:用C#.NET手把手教你做微信公众号开发(20)--使用微信支付线上收款:jsapi方式

    在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下jsapi支付,场景就是在微信内打开某个页面,完成在线支付,同样一个网页,使用微信打开就是js ...

  6. 实例:用C#.NET手把手教你做微信公众号开发(21)--使用微信支付线上收款:H5方式

    在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下H5场景支付,使用手机浏览器打开就是H5方式,最常见的推广是短信内置链接,这种场景需要调用微信 ...

  7. 视频教程-线上培训上课实录整站设计制作开发全能培训-HTML5/CSS

    线上培训上课实录整站设计制作开发全能培训 粉丝已经近2万人.传课网业余讲师. 彭亮 ¥39.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠,最 ...

  8. ssm基于微信小程序的食堂线上预约点餐系统--(ssm+uinapp+Mysql)

    ssm基于微信小程序的食堂线上预约点餐系统–(ssm+uinapp+Mysql) 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括食堂线上预约点餐系统的网络应用,在外 ...

  9. 微信公众号线上和线下增粉秘籍:

    微信公众号线上和线下增粉秘籍: 线上方法:  1.客户下单之后,短信提醒客户已发货,并关注微信***,回复**,可获得**. 2.短信群发引导关注,关注有礼.关注玩游戏有奖.关注即送优惠券等等方式. ...

  10. 微信小程序直播助力深圳线上购物节 数百场品牌小程序开播

    3月8日消息,自2月下旬微信宣布小程序直播能力公测以来,零售商家在复工复产关键时期纷纷"入局"小程序直播.微信发布消息称,3月8日"女神节"当天,数百个品牌将同 ...

最新文章

  1. 传统数据仓库架构与Hadoop的区别
  2. Selenium3自动化测试——21.数据驱动应用
  3. Unity SRP自定义渲染管线 -- 1.Custom Pipeline
  4. jquery live hover绑定方法
  5. listen(int fd, int backlog)中的backlog含义
  6. java filter 回调_Java 异步回调机制实例分析
  7. Quartz配置文件详解生产配置
  8. 如何理解P40采用RYYB比RGGB的感光能力提升40%
  9. 程序员阶段性成长的自我总结
  10. 10/13 Total variation loss 全变分
  11. 波士顿房价预测(线性回归、岭回归、决策树)
  12. 几种x-ray产生的原理
  13. 【flutter】上架马甲包过审
  14. 手把手教你如何在AWS EC2 启用 IPv6
  15. AGV自动导航控制系统
  16. 软件测试-自我介绍-整体框架
  17. linux lib.a反编译,android反编译-smali文件语法
  18. visio双线方框怎么画_visio2013画流程图怎么操作?|visio2013专业版画流程图的方法...
  19. .htaccess中的apache rewrite规则写法详解
  20. C++day06 虚析构函数

热门文章

  1. B 罗马数字 2018浙江理工大学新生赛
  2. Exif 格式介绍和操作
  3. littleVGL开发:littleVGL的介绍
  4. AbstractApplicationContext的refresh方法
  5. 基于Android的人脸门禁系统
  6. 剑指offer 09、30:栈与队列
  7. 第十六周学习生活总结
  8. Android免费地图应用网址
  9. 早上如何泡上一杯质量上佳的柠檬水
  10. CorelDRAW2022矢量绘图软件老牌的矢量图形制作工具