下面是模板页面单击领取卡券的,加了一个参数outer_str,这样领取返回时就多了一个参数outer_str(这里返回没有下滑线了),可以作为场景的来源参照,nimei_str那个不用的也可以
{php echo register_jssdk(false);} <script> function jumpCardUrl(){ // alert("{$cardArry['openid']}"); // alert("{$cardArry['timestamp']}"); // alert("{$cardArry['nonceStr']}"); // alert("{$cardArry['signature']}"); // alert("{$cardArry['cardId']}"); wx.addCard({ cardList: [ { cardId: '{$cardArry['cardId']}', cardExt: '{"code": "", "openid": "{$cardArry['openid']}", "timestamp": "{$cardArry['timestamp']}","nonce_str":"{$cardArry['nonceStr']}", "signature":"{$cardArry['signature']}","outer_str":"{$outerstr}","nimei_str":"rw_22_33"}' } ], // 需要添加的卡券列表 success: function (res) { } }); } </script>
php页面 卡券场景来源变量 就不说了根据实际情况查询 $cardinfo,$openid分别是卡券cardid和用户openid,用户openid不正确好像也可以的
$cardArry = getCard($cardinfo,$openid);
function getCard($card_id,$openid){
global $_W,$_GPC;
//获取access_token
load()->classs('weixin.account');
load()->func('communication');
$access_token = WeAccount::token();
$ticket=getApiTicket($access_token);
//获得ticket后将参数拼成字符串进行sha1加密
$now = time();
$timestamp = $now;
$nonceStr = createNonceStr();
$card_id = $card_id;
$openid = $openid;
$arr = array($card_id,$ticket,$nonceStr,$openid,$timestamp);//组装参数
asort($arr, SORT_STRING);
$sortString = "";
foreach($arr as $temp){
$sortString = $sortString.$temp;
}
$signature = sha1($sortString);
$cardArry = array(
'code' =>"",
'openid' => $openid,
'timestamp' => $now,
'signature' => $signature,
'cardId' => $card_id,
'ticket' => $ticket,
'nonceStr' => $nonceStr,
);
return $cardArry;
}
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;
}
function getCardTicket($app_id){
global $_W,$_GPC;
//获取access_token
load()->classs('weixin.account');
load()->func('communication');
$access_token = WeAccount::token();
$api_ticket = getApiTicket($access_token);
$card_id ="";
$card_type = "";
$location_id = "";
//获得ticket后将参数拼成字符串进行sha1加密
$now = time();
$timestamp = $now;
$nonceStr = createNonceStr(8);
$arr = array($api_ticket,$location_id,$app_id,$nonceStr,$card_id,$timestamp,$card_type);//组装参数
asort($arr, SORT_STRING);
$sortString = "";
foreach($arr as $temp){
$sortString = $sortString.$temp;
}
$signature = sha1($sortString);
$cardArry = array(
'timestamp' => $now,
'signature' => $signature,
'nonceStr' => $nonceStr,
);
return $cardArry;
}
function getApiTicket($access_token){
global $_W, $_GPC;
$w = $_W['uniacid'];
$cookiename = "wx{$w}a{$w}pi{$w}ti{$w}ck{$w}et";
$apiticket = $_COOKIE[$cookiename];
if (empty($apiticket)){
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$access_token}&type=wx_card";
load()->func('communication');
$res = ihttp_get($url);
$res = json_decode($res['content'],true);
if (!empty($res['ticket'])){
setcookie($cookiename,$res['ticket'],time()+$res['expires_in']);
$apiticket = $res['ticket'];
}else{
message('获取api_ticket失败:'.$res['errmsg']);
}
}
return $apiticket;
}
领取成功,核销 返回信息都是在api.php里面
有一个在卡券页面点击第一个使用的核销不是在api里面,在其他文件