卡券php小程序,微信小程序领取卡券 - osc_88a08cel的个人空间 - OSCHINA - 中文开源技术交流社区...

微信小程序领取卡券

标签(空格分隔): php

开发前需要准备的工作

1 小程序和公众号要有绑定

2 小程序和该公众号要绑定到同一个开发平台下 [https://open.weixin.qq.com/]

3 公众号开通微信卡券功能

4 卡券是在公众号上生成的

5 小程序领取公众号上的卡券

看官方文档

公众号平台卡券文档[https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432]

小程序卡券文档[https://developers.weixin.qq.com/miniprogram/dev/api/card.html]

简单说一下创建卡券:

我使用的是[创建会议门票]

接口:http请求方式: POSTURL:https://api.weixin.qq.com/card/create?access_token=ACCESS_TOKEN

参数:

1 access_token调用接口凭证

2 POST数据 JSON数据

POST数据格式:

1 card_typestring(24) 会议门票类型。

2 base_infoJSON结构基本的卡券数据,见下表,所有卡券通用。

3 meeting_detail string(3072)本次会议于2015年5月10号在广州举行,会场地点:xxxx。会议详情。

主要就是填充base_info信息自己看文档就明白了

返回值:

{

"errcode":0,

"errmsg":"ok",

"card_id":"p1Pj9jr90_SQRaVqYI239Ka1erkI"

}

**记得把card_id保存**

小程序领取卡券:

前端发起请求:wx.addCard(OBJECT)

后端把需要的参数给前端

参数:

cardList: [

{

cardId: '',

cardExt: '{"code": "", "openid": "", "timestamp": "", "signature":""}'

}, {

cardId: '',

cardExt: '{"code": "", "openid": "", "timestamp": "", "signature":""}'

}

]

cardId : 生成卡券返回的cardId

cardExt : json字符串

code : 每一张卡券都有一个code[创建时自己生成的code,这个code有特殊符号限制,和长度限制,自己去感受下微信的坑]

openid : 用户的openid

timestamp : 时间戳/秒

signature : 签名

回调:

处理你领取成功的业务逻辑

示例代码

小程序领取卡券:

# 领取卡券

public function receiveCard()

{

# 小程序appid

$appId = input('appid');

# openid

$openId = input('openid);

# 订单id

$orderId = input('order_id');

$list = $this->getInfo($appId, $openId, $orderId);

# 返回前端json数据格式

return $list;

}

public function getInfo($appId, $openId, $orderId)

{

# 业务处理[比如:是否开启卡券功能 | 是否绑定了公众号 等等等.....]

if () xxxxxxxxx;

# 查询订单获取保存的 cardId 和 每张卡券的唯一标识 code

$orderInfo = Db::table('')->field('code, card_id')->where()->select();

# 获取ApiTicket 主要用于生成签名

1 [签名文档] : [https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115]

2 [获取access_token] : [https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$config['appid']."&secret=".$config['secret'];]

3 [获取api_ticket] : [https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=wx_card]

注意:appid 和 secret 是公众号的,通过小程序的appid查询对应公众号的配置。apiTicket 和 accessToken 应该缓存或者是个公共的方法,避免多个地方使用失效。

# 处理数据返回数据

foreach ($orderInfo as $key => $value) {

# 生成签名的参数

# nonce_str 自己生成的随机字符串31位

$params = [

'code' => $value['code'],

'api_ticket' => $apiTicket,

'timestamp' => time(),

'nonce_str' => sp_random_string(31),

'card_id' => $value['card_id'],

'openid' => $openId

];

$signature = $this->getSignature($params);

$value['openid'] = $params['openid'];

$value['timestamp'] = $params['timestamp'];

$value['signature'] = $signature;

$data[] = $value;

}

}

# 生成签名

public function getSignature($params)

{

sort($params, SORT_STRING);

return sha1(implode($params));

}

# 回调

public function cardCallBack()

{

# $_POST 和 input('post.') 竟然接收不到数据 没办法只能用 $GLOBALS['HTTP_RAW_POST_DATA']

$postData = $GLOBALS['HTTP_RAW_POST_DATA'];

$postData = json_decode($postData, true);

$cardList = $postData['card_list'];

# 把数据转数组

foreach ($cardList as $k => $v) {

$v['cardExt'] = json_decode($v['cardExt'], true);

$data[] = $v;

}

foreach ($data as $key => $value) {

# 业务处理

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值