微信开发

获取access_token

	//如果数据表里没有数据或者小于当前时间戳
    if (empty($token) or $token['time'] < $time) {
        $sql2 = "select appid,secret from user where id_sh=1";
        $u_info = $db->select_one($sql2);
        //从接口获取access_token(需要填写appid,secret)
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$u_info[appid]&secret=$u_info[secret]";
        //把整个文件读入一个字符串中file_get_contents
        $json = file_get_contents($url);
        //把json格式转化为数组
        $result = json_decode($json, true);
        //获取关联数组中名字为access_token的值就是access_token
        $access_token = $result['access_token'];
        //如果表里面有记录且表里的时间戳小于当前时间戳,即时间戳过期 要重新储存
        $datat = [
            'access_token' => $access_token,
            'time' => $time + 7200
        ];
        if ($token) {
            $datat['access_token'] = "'$access_token'";
            $res = $db->update($datat, 'token');
        } else {
            $res = $db->insert($datat, 'token');
        }
    } else {
        $access_token = $token['access_token'];
    }

微信网页开发-添加卡卷

//从接口获取access_token(需要填写appid,secret)
	
		//获取jsapi_ticket
	//获取微信jsapi_ticket接口地址
	$jsapi_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=$access_token&type=jsapi";
	//将其通过do_post_request()方法转换成json格式的字符串;
	$getdata = do_post_request($jsapi_url, urldecode($data));
	//将json格式的字符串通过json_decode解码成数组
	$arr_jsapi = json_decode($getdata, true);
	//获取数组中名字为ticket的值就是jsapi_ticket
	$jsapi_ticket = $arr_jsapi['ticket'];

	//获取卡券api_ticket
	//获取微信api_ticket接口地址
	$api_ticket = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=$access_token&type=wx_card";
	//将其通过do_post_request()方法转换成json格式的字符串;
	$getdata2 = do_post_request($api_ticket, urldecode($data));
	//将json格式的字符串通过json_decode解码成数组
	$arr_api = json_decode($getdata2, true);
	//获取数组中名字为ticket的值就是api_ticket
	$api_tickets = $arr_api['ticket'];
		//获取使用接口的url地址要动态获取
	$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
	$url1 = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
	//生成js的签名函数包括参数jsapi_ticket,noncestr,timestamp,url,
	//参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳)
	//, url(当前网页的URL,不包含#及其后面部分) 。
	//对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,
	//使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。
	//这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,
	//不进行URL 转义。
	$str = 'jsapi_ticket=' . $jsapi_ticket . '&noncestr=' . $n . '&timestamp=' . $time . '&url=' . $url1;
	//将$str进行sha1加密就得到了js的签名
	$jsSign = sha1($str);
	//生成卡券的签名(参与签名的参数一定要和cardList里面的参数一样否则会报错),卡券的签名和js的签名是不一样的
	//签名算法是按照这几个参数值按照字典顺序排列之后再按照sha1加密
	$arr = array($_GET['cid'], $api_tickets, $time); //组装参数
	asort($arr, SORT_STRING);
	$sortString = "";
	foreach ($arr as $temp) {
		$sortString = $sortString . $temp;
	}
	$cardSign = sha1($sortString);
js部分
	<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
wx.config({
				debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
				appId: "<?php echo $u_info['appid'] ?>", // 必填,公众号的唯一标识
				timestamp: "<?php echo $time ?>", // 必填,生成签名的时间戳
				nonceStr: "<?php echo $n ?>", // 必填,生成签名的随机串
				signature: "<?php echo $jsSign ?>", // 必填,签名
				jsApiList: [
					'addCard'
				] // 必填,需要使用的JS接口列表
			});
			wx.ready(function() {
				//添加卡券
				window.ac = function() {
					wx.addCard({
						cardList: [{
							cardId: "<?php echo $_GET['cid'] ?>",
							cardExt: '{"timestamp":"<?php echo $time ?>","signature":"<?php echo $cardSign ?>"}'
						}],
						success: function(res) {
							// alert('已添加卡券:' + JSON.stringify(res.cardList));
							返回的code为加密后的code码,可以解码获取code码
						}
					});
				};
			});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值