微信开发(六):微信卡券
来源:互联网 发布:大将军手写板软件 编辑:程序博客网 时间:2024/05/22 03:27
定义变量
<?phpdefine('APPID', 'w*******8');define('APPSECRET','8**********4');$cardid='pMk*****DY';//创建卡券成功获取$token=getAccessToken();?>
创建卡券
<?php///.....微信开发(五)......../**********1.创建卡券*************/$card_url="https://api.weixin.qq.com/card/create?access_token=$token";$data=array ( 'card' => array ( 'card_type' => 'GENERAL_COUPON', //卡券类型:优惠券 'general_coupon' => array ( 'base_info' => array ( 'logo_url' => 'http://mmbiz.qpic.cn/mmbiz/iaL1LJM1mF9aRKPZJkmG8xXhiaHqkKSVMMWeN3hLut7X7hicFNjakmxibMLGWpXrEXB33367o7zHN0CwngnQY7zb7g/0', 'brand_name' => '橙子优惠券', 'code_type' => 'CODE_TYPE_QRCODE', //卡券类型 'title' => '优惠券', 'sub_title' => '优惠', 'color' => 'Color030',//颜色 'notice' => '使用时请出示此券', //展示显示的卡券 'service_phone' => '15812345698', 'date_info' => array ( 'type' => 'DATE_TYPE_FIX_TERM', //时间类型 'fixed_term' => 90,//有效期限 'fixed_begin_term' => 0,//从什么时候开始 ), 'sku' => array ( 'quantity' => '100',//库存 ), 'get_limit' => 100,//每个用户最多可以领取数量 'bind_openid' => false,//没有绑定领取的用户 'can_share' => true,//可以分享 'can_give_friend' => false,//赠送给朋友 'center_title' => '立即使用1',//中间展示按钮 'center_sub_title' => '点击立即使用', 'center_url' => 'https://www.baidu.com/',//跳转地址 'custom_url_name' => '立即使用2', 'custom_url' => 'https://www.baidu.com/',//底部跳转入口 'custom_url_sub_title' => '点击跳转', ), 'default_detail' => '橙子专用优惠券,不可与其他优惠同享' ), ),);$res=httpPost($card_url,json_encode($data,JSON_UNESCAPED_UNICODE));var_dump($res);?>
结果:
{
“errcode”:0,
“errmsg”:”ok”,
“card_id”:”pMkQc****rmN_DY”
}创建卡券成功!!!
投放卡券
<?php/**********2.投放卡券*************///2.1二维码投放$tf_url="https://api.weixin.qq.com/card/qrcode/create?access_token=$token";$json=' {"action_name": "QR_CARD", "expire_seconds": 1800,"action_info": {"card": {"card_id": "pM******k", "is_unique_code": false } }} ';$res=httpPost($tf_url,$json);var_dump($res);?>
结果:
{
“errcode”:0,
“errmsg”:”ok”,
“ticket”:”gQGP******AA”,
“expire_seconds”:1800,
“url”:”http://weixi*****4o”,
“show_qrcode_url”:”https://mp*******AwQIBwAA”
}扫描show_qrcode_url链接显示的二维码!
//2.2 网页投放<?php$SignPackage=getSignPackage();$cardExt = getPutCardExt($cardid,$token);?><button style="width:100px;height:100px;" id="addCard">领取卡券</button><script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script><script src="http://images.yeecare.com/login/js/jquery.js"></script><script> wx.config({ debug: true, // 开启调试模式 appId: '<?php echo APPID?>', // 必填,公众号的唯一标识 timestamp: <?php echo $SignPackage['timestamp']?>, // 必填,生成签名的时间戳 nonceStr: '<?php echo $SignPackage['nonceStr']?>', // 必填,生成签名的随机串 signature: '<?php echo $SignPackage['signature']?>',// 必填,签名,见附录1 jsApiList: ['addCard'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); document.querySelector('#addCard').onclick = function () { wx.addCard({ cardList: [ { cardId: '<?php echo $cardid?>', cardExt: '<?php echo json_encode($cardExt)?>' }, ], success: function (res) { alert('已添加卡券:' + JSON.stringify(res.cardList)); }, cancel: function (res) { alert('关闭领取:' +JSON.stringify(res)) } }); };</script>
拉取适用卡券列表并获取用户选择信息
<?php$SignPackage=getSignPackage();$cardExt = getCardExt($token);?><button style="width:100px;height:100px;" id="chooseCard">选择卡券</button><script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script><script src="http://images.yeecare.com/login/js/jquery.js"></script><script> wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '<?php echo APPID?>', // 必填,公众号的唯一标识 timestamp: <?php echo $SignPackage['timestamp']?>, // 必填,生成签名的时间戳 nonceStr: '<?php echo $SignPackage['nonceStr']?>', // 必填,生成签名的随机串 signature: '<?php echo $SignPackage['signature']?>',// 必填,签名,见附录1 jsApiList: ['chooseCard'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); document.querySelector('#chooseCard').onclick=function(){ wx.chooseCard({ shopId: '', // 门店Id cardType: '', // 卡券类型 cardId: '', // 卡券Id timestamp: <?php echo $cardExt['timestamp']?>, // 卡券签名时间戳 nonceStr: '<?php echo $cardExt['nonceStr']?>', // 卡券签名随机串 signType: '<?php echo $cardExt['signType']?>', // 签名方式,默认'SHA1' cardSign: '<?php echo $cardExt['cardSign']?>', // 卡券签名 success: function (res) { if (res.errMsg == "chooseCard:ok") { var cardList= res.cardList; alert(cardList); }; } }); };</script>
检查卡券状态
核销卡券
设置白名单
<?php//设置测试白名单$arr=array( 'openid'=>array('oM*****Ykk'),);$url="https://api.weixin.qq.com/card/testwhitelist/set?access_token=$token";$res=httpPost($url,json_encode($arr,JSON_UNESCAPED_UNICODE));var_dump($res);?>
结果:
{
“errcode”:0,
“errmsg”:”ok”,
“white_list_size”:1,
“success_openid”:[
“oM*****Ykk”
],
“success_username”:[ ]
}
公共代码
//(1)生成/获取access_token并写入文件function getAccessToken() { $data = json_decode(file_get_contents("access_token.json")); if ($data->expire_time < time()) { $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET; $res = json_decode(httpPost($url)); $access_token = $res->access_token; if ($access_token) { $data->expire_time = time() + 7000; $data->access_token = $access_token; $fp = fopen("access_token.json", "w"); fwrite($fp, json_encode($data)); fclose($fp); } } else { $access_token = $data->access_token; } return $access_token;}function httpPost($url,$data=''){ $ch= curl_init(); curl_setopt($ch, CURLOPT_URL, $url ); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设置内容是不是返回 if(!empty($data)){ curl_setopt($ch, CURLOPT_POST, 1); //设置post提交数据 curl_setopt($ch,CURLOPT_POSTFIELDS,$data); //设置post提交数据 } //判断当前是不是有post数据的发 $output=curl_exec($ch);//请求的地址输出了什么数据就会返回什么数据 if ($output === FALSE) { $output="curl 错误信息: " . curl_error($ch); } curl_close($ch); return $output;}function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 500); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl); curl_close($curl); return $res;}function getSignPackage() { $jsapiTicket = getJsApiTicket(); // 注意 URL 一定要动态获取,不能 hardcode. $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $timestamp = time(); $nonceStr = createNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序 $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; $signature = sha1($string); $signPackage = array( "appId" => APPID, "nonceStr" => $nonceStr, "timestamp" => $timestamp, "url" => $url, "signature" => $signature, "rawString" => $string ); return $signPackage;}function getJsApiTicket() { // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例 $data = json_decode(file_get_contents("jsapi_ticket.json")); if ($data->expire_time < time()) { $accessToken = getAccessToken(); // 如果是企业号用以下 URL 获取 ticket // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken"; $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken"; $res = json_decode(httpGet($url)); $ticket = $res->ticket; if ($ticket) { $data->expire_time = time() + 7000; $data->jsapi_ticket = $ticket; $fp = fopen("jsapi_ticket.json", "w"); fwrite($fp, json_encode($data)); fclose($fp); } } else { $ticket = $data->jsapi_ticket; } return $ticket;}function get_signature($array){ sort( $array, SORT_STRING ); return sha1( implode( $array ) );}function createNonceStr($length = 32) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return $str;}function getPutCardExt($cardid,$accessToken,$openid=""){ $api_ticket = getApiTicket($accessToken); $timestamp = time(); $nonce_str = createNonceStr(); $arr = array( "api_ticket" => $api_ticket, "timestamp" => $timestamp, "card_id" => $cardid, "code" =>'', "openid" =>'', "nonce_str" => $nonce_str, ); $signature = get_signature($arr); $cardExt = array( "openid" => "$openid", "timestamp" => "$timestamp", "nonce_str" => "$nonce_str", "signature" => "$signature", ); return $cardExt;}function getCardExt($accessToken) { $api_ticket = getApiTicket($accessToken); $timestamp = time(); $nonce_str = createNonceStr(); $array = array( "api_ticket" => $api_ticket, "timestamp" => $timestamp, "card_type" => '', "nonce_str" => $nonce_str, "app_id" => APPID, ); $signature = get_signature($array); $cardExt = array( "api_ticket" => $api_ticket, "timestamp" => $timestamp, "cardType" => '', "nonceStr" => $nonce_str, "cardSign" => $signature, "signType" => 'SHA1' ); return $cardExt;}function getApiTicket($accessToken){ $API_TICKET_URL="https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=wx_card&access_token={$accessToken}"; $json=file_get_contents($API_TICKET_URL); $json = json_decode($json, true); $api_ticket = $json['ticket']; return $api_ticket;}
阅读全文
0 0
- 微信开发(六):微信卡券
- 微信开发(六)微信分享接入
- 微信开发(六)微信分享接入
- 微信开发总结 六
- 微信公众平台开发(六) 翻译功能开发
- 微信公众平台开发(六) 翻译功能开发
- 微信公众平台开发(六) 翻译功能开发
- 微信公众平台开发(六) 翻译功能开发
- 微信公众平台开发(六) 翻译功能开发
- 微信公众平台开发(六) 翻译功能开发
- 微信公众平台开发(六) 翻译功能开发
- 微信公众平台开发(六) 翻译功能开发
- 微信公众平台开发教程(六)安全策略
- 微信公众平台开发教程(六)安全策略
- 微信开发学习日记(六):weiphp框架
- 微信开发系列(六)_js调用微信扫码
- PHP及其微信开发(学习之路 六)
- 微信开发六 发送消息(客服/群发/模板)
- c++标准库wstring实现原理
- 【JUnit 报错】 method initializationerror not found:JUnit4单元测试报错问题
- Informatica Joiner组件
- Android 实战技巧-状态栏渐变
- 【Python】Python 的图形界面(GUI)编程
- 微信开发(六):微信卡券
- 获取网络json解析中的图片
- 上下行参考信号RS
- uploadify 图片上传demo
- eMMC分区详解
- linux开启防火墙,开放80端口,开放mysql的3306端口,开放svn的3609端口,开放tomcat的8080端口。
- Linux 各种命令
- docker 和 主机 文件互拷
- Jetty安装与部署