本文给大家介绍的是个人总结的一些微信API接口,包括微信支付、微信红包、微信卡券、微信小店等,十分的全面,有需要的小伙伴可以参考下。
1. [代码]index.php
<?php
include_once
'lib.inc.php'
;
$wcObj
=
new
WeChat(
"YOUKUIYUAN"
);
$wcObj
->wcValid();
2. [代码]微信入口类
<?php
/**
* Description of wechat
*
* @author Administrator
*/
class
WeChat
extends
WxApi{
public
$token
=
""
;
//put your code here
public
function
__construct(
$token
=
""
) {
parent::__construct();
$this
->token =
$token
;
}
public
function
wcCheckSignature(){
try
{
if
(
empty
(
$this
->token)) {
throw
new
Exception(
'TOKEN is not defined!'
);
}
$signature
=
$_GET
[
"signature"
];
$timestamp
=
$_GET
[
"timestamp"
];
$nonce
=
$_GET
[
"nonce"
];
$token
=
$this
->token;
$tmpArr
=
array
(
$token
,
$timestamp
,
$nonce
);
// use SORT_STRING rule
sort(
$tmpArr
, SORT_STRING);
$tmpStr
= implode(
$tmpArr
);
$tmpStr
= sha1(
$tmpStr
);
if
(
$tmpStr
==
$signature
){
return
true;
}
else
{
return
false;
}
}
catch
(Exception
$e
) {
echo
'Message: '
.
$e
->getMessage();
}
}
public
function
wcValid(){
$echoStr
= isset(
$_GET
[
"echostr"
]) && !
empty
(
$_GET
[
"echostr"
]) ?
addslashes
(
$_GET
[
"echostr"
]) : NULL;
if
(
is_null
(
$echoStr
)){
$this
->wcMsg();
}
else
{
//valid signature , option
if
(
$this
->wcCheckSignature()){
echo
$echoStr
;
exit
;
}
else
{
exit
();
}
}
}
public
function
wcMsg(){
//get post data, May be due to the different environments
$postStr
= isset(
$GLOBALS
[
"HTTP_RAW_POST_DATA"
]) && !
empty
(
$GLOBALS
[
"HTTP_RAW_POST_DATA"
]) ?
$GLOBALS
[
"HTTP_RAW_POST_DATA"
] :
""
;
if
(!
empty
(
$postStr
)){
libxml_disable_entity_loader(true);
$postObj
= simplexml_load_string(
$postStr
,
'SimpleXMLElement'
, LIBXML_NOCDATA);
$this
->zcLog(TRUE,
$postObj
);
$fromUsername
=
$postObj
->FromUserName;
$toUsername
=
$postObj
->ToUserName;
$MsgType
=
$postObj
->MsgType;
if
(
$MsgType
==
'event'
){
//执行事件相应
$Event
=
$postObj
->Event;
switch
(
$Event
) {
case
'subscribe'
:
//关注
break
;
case
'unsubscribe'
:
//取消关注
break
;
case
'SCAN'
:
//扫描
break
;
case
'LOCATION'
:
//地址
break
;
case
'CLICK'
:
//点击时间
break
;
case
'VIEW'
:
//跳转
break
;
case
'card_pass_check'
:
//卡券审核通过
break
;
case
'card_not_pass_check'
:
//卡券审核失败
break
;
case
'user_get_card'
:
//用户领取卡券
break
;
case
'user_del_card'
:
//用户删除卡券
break
;
case
'user_view_card'
:
//用户浏览会员卡
break
;
case
'user_consume_card'
:
//用户核销卡券
break
;
case
'merchant_order'
:
//微小店用户下单付款
break
;
default
:
break
;
}
}
else
{
switch
(
$MsgType
) {
case
'text'
:
//文本格式
break
;
case
'image'
:
//图片格式
break
;
case
'voice'
:
//声音
break
;
case
'video'
:
//视频
break
;
case
'shortvideo'
:
//小视频
break
;
case
'location'
:
//上传地理位置
break
;
case
'link'
:
//链接相应
break
;
default
:
break
;
}
}
$keyword
= trim(
$postObj
->Content);
$time
= time();
$textTpl
= "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
if
(!
empty
(
$keyword
)){
$msgType
=
"text"
;
$contentStr
=
"Welcome to wechat world!"
;
$resultStr
= sprintf(
$textTpl
,
$fromUsername
,
$toUsername
,
$time
,
$msgType
,
$contentStr
);
echo
$resultStr
;
}
else
{
echo
"Input something..."
;
}
}
else
{
echo
"暂时没有任何信息!"
;
exit
;
}
}
//日志LOG
public
function
zcLog(
$errcode
,
$errmsg
){
$this
->returnAy =
array
();
$this
->returnAy[
'errcode'
] =
$errcode
;
$this
->returnAy[
'errmsg'
] =
$errmsg
;
$this
->returnAy[
'errtime'
] =
date
(
"Y-m-d H:i:s"
,time());
$logfile
=
fopen
(
"logfile_"
.
date
(
"Ymd"
,time()).
".txt"
,
"a+"
);
$txt
= json_encode(
$this
->returnAy).
"\n"
;
fwrite(
$logfile
,
$txt
);
fclose(
$logfile
);
//return $this->returnAy;
}
}
3. [代码]微信操作类 - 更新了自定义菜单部分
<?php
/********************************************************
* @author Kyler You <QQ:2444756311>
* @version 2.0.1
* @uses $wxApi = new WxApi();
* @package 微信API接口 陆续会继续进行更新
********************************************************/
class
WxApi {
//const appId = "";
//const appSecret = "";
const
appId =
""
;
const
appSecret =
""
;
//const mchid = ""; //商户号
//const privatekey = ""; //私钥
public
$parameters
=
array
();
public
function
__construct(){
}
/****************************************************
* 微信提交API方法,返回微信指定JSON
****************************************************/
public
function
wxHttpsRequest(
$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, 1);
$output
= curl_exec(
$curl
);
curl_close(
$curl
);
return
$output
;
}
/****************************************************
* 微信带证书提交数据 - 微信红包使用
****************************************************/
public
function
wxHttpsRequestPem(
$url
,
$vars
,
$second
=30,
$aHeader
=
array
()){
$ch
= curl_init();
//超时时间
curl_setopt(
$ch
,CURLOPT_TIMEOUT,
$second
);
curl_setopt(
$ch
,CURLOPT_RETURNTRANSFER, 1);
//这里设置代理,如果有的话
//curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');
//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
curl_setopt(
$ch
,CURLOPT_URL,
$url
);
curl_setopt(
$ch
,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt(
$ch
,CURLOPT_SSL_VERIFYHOST,false);
//以下两种方式需选择一种
//第一种方法,cert 与 key 分别属于两个.pem文件
//默认格式为PEM,可以注释
curl_setopt(
$ch
,CURLOPT_SSLCERTTYPE,
'PEM'
);
curl_setopt(
$ch
,CURLOPT_SSLCERT,
getcwd
().
'/apiclient_cert.pem'
);
//默认格式为PEM,可以注释
curl_setopt(
$ch
,CURLOPT_SSLKEYTYPE,
'PEM'
);
curl_setopt(
$ch
,CURLOPT_SSLKEY,
getcwd
().
'/apiclient_key.pem'
);
curl_setopt(
$ch
,CURLOPT_CAINFO,
'PEM'
);
curl_setopt(
$ch
,CURLOPT_CAINFO,
getcwd
().
'/rootca.pem'
);
//第二种方式,两个文件合成一个.pem文件
//curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem');
if
(
count
(
$aHeader
) >= 1 ){
curl_setopt(
$ch
, CURLOPT_HTTPHEADER,
$aHeader
);
}
curl_setopt(
$ch
,CURLOPT_POST, 1);
curl_setopt(
$ch
,CURLOPT_POSTFIELDS,
$vars
);
$data
= curl_exec(
$ch
);
if
(
$data
){
curl_close(
$ch
);
return
$data
;
}
else
{
$error
= curl_errno(
$ch
);
echo
"call faild, errorCode:$error\n"
;
curl_close(
$ch
);
return
false;
}
}
/****************************************************
* 微信获取AccessToken 返回指定微信公众号的at信息
****************************************************/
public
function
wxAccessToken(
$appId
= NULL ,
$appSecret
= NULL){
$appId
=
is_null
(
$appId
) ? self::appId :
$appId
;
$appSecret
=
is_null
(
$appSecret
) ? self::appSecret :
$appSecret
;
$data
= json_decode(
file_get_contents
(
"access_token.json"
));
if
(
$data
->expire_time < time()) {
//echo $appId,$appSecret;
$url
=
"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
.
$appId
.
"&secret="
.
$appSecret
;
$result
=
$this
->wxHttpsRequest(
$url
);
//print_r($result);
$jsoninfo
= json_decode(
$result
, true);
$access_token
=
$jsoninfo
[
"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
;
}
/****************************************************
* 微信获取AccessToken 返回指定微信公众号的at信息
****************************************************/
public
function
wxJsApiTicket(
$appId
= NULL ,
$appSecret
= NULL){
$appId
=
is_null
(
$appId
) ? self::appId :
$appId
;
$appSecret
=
is_null
(
$appSecret
) ? self::appSecret :
$appSecret
;
$data
= json_decode(
file_get_contents
(
"jsapi_ticket.json"
));
if
(
$data
->expire_time < time()) {
$url
=
"https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token="
.
$this
->wxAccessToken();
$result
=
$this
->wxHttpsRequest(
$url
);
$jsoninfo
= json_decode(
$result
, true);
$ticket
=
$jsoninfo
[
'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
;
}
/****************************************************
* 微信通过OPENID获取用户信息,返回数组
****************************************************/
public
function
wxGetUser(
$openId
){
$wxAccessToken
=
$this
->wxAccessToken();
$url
=
"https://api.weixin.qq.com/cgi-bin/user/info?access_token="
.
$wxAccessToken
.
"&openid="
.
$openId
.
"&lang=zh_CN"
;
$result
=
$this
->wxHttpsRequest(
$url
);
$jsoninfo
= json_decode(
$result
, true);
return
$jsoninfo
;
}
/****************************************************
* 微信生成二维码ticket
****************************************************/
public
function
wxQrCodeTicket(
$jsonData
){
$wxAccessToken
=
$this
->wxAccessToken();
$result
=
$this
->wxHttpsRequest(
$url
,
$jsonData
);
return
$result
;
}
/****************************************************
* 微信通过ticket生成二维码
****************************************************/
public
function
wxQrCode(
$ticket
){
return
$url
;
}
/****************************************************
* 发送自定义的模板消息
****************************************************/
public
function
wxSetSend(
$touser
,
$template_id
,
$url
,
$data
,
$topcolor
=
'#7B68EE'
){
$template
=
array
(
'touser'
=>
$touser
,
'template_id'
=>
$template_id
,
'url'
=>
$url
,
'topcolor'
=>
$topcolor
,
'data'
=>
$data
);
$jsonData
= json_encode(
$template
);
$result
=
$this
->wxSendTemplate(
$jsonData
);
return
$result
;
}
/****************************************************
* 微信设置OAUTH跳转URL,返回字符串信息 - SCOPE = snsapi_base //验证时不返回确认页面,只能获取OPENID
****************************************************/
public
function
wxOauthBase(
$redirectUrl
,
$state
=
""
,
$appId
= NULL){
$appId
=
is_null
(
$appId
) ? self::appId :
$appId
;
$url
=
"https://open.weixin.qq.com/connect/oauth2/authorize?appid="
.
$appId
.
"&redirect_uri="
.
$redirectUrl
.
"&response_type=code&scope=snsapi_base&state="
.
$state
.
"#wechat_redirect"
;
return
$url
;
}
/****************************************************
* 微信设置OAUTH跳转URL,返回字符串信息 - SCOPE = snsapi_userinfo //获取用户完整信息
****************************************************/
public
function
wxOauthUserinfo(
$redirectUrl
,
$state
=
""
,
$appId
= NULL){
$appId
=
is_null
(
$appId
) ? self::appId :
$appId
;
$url
=
"https://open.weixin.qq.com/connect/oauth2/authorize?appid="
.
$appId
.
"&redirect_uri="
.
$redirectUrl
.
"&response_type=code&scope=snsapi_userinfo&state="
.
$state
.
"#wechat_redirect"
;
return
$url
;
}
/****************************************************
* 微信OAUTH跳转指定URL
****************************************************/
public
function
wxHeader(
$url
){
header(
"location:"
.
$url
);
}
/****************************************************
* 微信通过OAUTH返回页面中获取AT信息
****************************************************/
public
function
wxOauthAccessToken(
$code
,
$appId
= NULL ,
$appSecret
= NULL){
$appId
=
is_null
(
$appId
) ? self::appId :
$appId
;
$appSecret
=
is_null
(
$appSecret
) ? self::appSecret :
$appSecret
;
$url
=
"https://api.weixin.qq.com/sns/oauth2/access_token?appid="
.
$appId
.
"&secret="
.
$appSecret
.
"&code="
.
$code
.
"&grant_type=authorization_code"
;
$result
=
$this
->wxHttpsRequest(
$url
);
//print_r($result);
$jsoninfo
= json_decode(
$result
, true);
//$access_token = $jsoninfo["access_token"];
return
$jsoninfo
;
}
/****************************************************
* 微信通过OAUTH的Access_Token的信息获取当前用户信息 // 只执行在snsapi_userinfo模式运行
****************************************************/
public
function
wxOauthUser(
$OauthAT
,
$openId
){
$url
=
"https://api.weixin.qq.com/sns/userinfo?access_token="
.
$OauthAT
.
"&openid="
.
$openId
.
"&lang=zh_CN"
;
$result
=
$this
->wxHttpsRequest(
$url
);
$jsoninfo
= json_decode(
$result
, true);
return
$jsoninfo
;
}
/****************************************************
* 创建自定义菜单
****************************************************/
public
function
wxMenuCreate(
$jsonData
){
$wxAccessToken
=
$this
->wxAccessToken();
$result
=
$this
->wxHttpsRequest(
$url
,
$jsonData
);
$jsoninfo
= json_decode(
$result
, true);
return
$jsoninfo
;
}
/****************************************************
* 获取自定义菜单
****************************************************/
public
function
wxMenuGet(){
$wxAccessToken
=
$this
->wxAccessToken();
$result
=
$this
->wxHttpsRequest(
$url
);
$jsoninfo
= json_decode(
$result
, true);
return
$jsoninfo
;
}
/****************************************************
* 删除自定义菜单
****************************************************/
public
function
wxMenuDelete(){
$wxAccessToken
=
$this
->wxAccessToken();
$result
=
$this
->wxHttpsRequest(
$url
);
$jsoninfo
= json_decode(
$result
, true);
return
$jsoninfo
;
}
/****************************************************
* 获取第三方自定义菜单
****************************************************/
public
function
wxMenuGetInfo(){
$wxAccessToken
=
$this
->wxAccessToken();
$url
=
"https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token="
.
$wxAccessToken
;
$result
=
$this
->wxHttpsRequest(
$url
);
$jsoninfo
= json_decode(
$result
, true);
return
$jsoninfo
;
}
/*****************************************************
* 生成随机字符串 - 最长为32位字符串
*****************************************************/
public
function
wxNonceStr(
$length
= 16,
$type
= FALSE) {
$chars
=
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
;
$str
=
""
;
for
(
$i
= 0;
$i
<
$length
;
$i
++) {
$str
.=
substr
(
$chars
, mt_rand(0,
strlen
(
$chars
) - 1), 1);
}
if
(
$type
== TRUE){
return
strtoupper
(md5(time() .
$str
));
}
else
{
return
$str
;
}
}
/*******************************************************
* 微信商户订单号 - 最长28位字符串
*******************************************************/
public
function
wxMchBillno(
$mchid
= NULL) {
if
(
is_null
(
$mchid
)){
if
(self::mchid ==
""
||
is_null
(self::mchid)){
$mchid
= time();
}
else
{
$mchid
= self::mchid;
}
}
else
{
$mchid
=
substr
(
addslashes
(
$mchid
),0,10);
}
return
date
(
"Ymd"
,time()).time().
$mchid
;
}
/*******************************************************
* 微信格式化数组变成参数格式 - 支持url加密
*******************************************************/
public
function
wxSetParam(
$parameters
){
if
(
is_array
(
$parameters
) && !
empty
(
$parameters
)){
$this
->parameters =
$parameters
;
return
$this
->parameters;
}
else
{
return
array
();
}
}
/*******************************************************
* 微信格式化数组变成参数格式 - 支持url加密
*******************************************************/
public
function
wxFormatArray(
$parameters
= NULL,
$urlencode
= FALSE){
if
(
is_null
(
$parameters
)){
$parameters
=
$this
->parameters;
}
$restr
=
""
;
//初始化空
ksort(
$parameters
);
//排序参数
foreach
(
$parameters
as
$k
=>
$v
){
//循环定制参数
if
(null !=
$v
&&
"null"
!=
$v
&&
"sign"
!=
$k
) {
if
(
$urlencode
){
//如果参数需要增加URL加密就增加,不需要则不需要
$v
= urlencode(
$v
);
}
$restr
.=
$k
.
"="
.
$v
.
"&"
;
//返回完整字符串
}
}
if
(
strlen
(
$restr
) > 0) {
//如果存在数据则将最后“&”删除
$restr
=
substr
(
$restr
, 0,
strlen
(
$restr
)-1);
}
return
$restr
;
//返回字符串
}
/*******************************************************
* 微信MD5签名生成器 - 需要将参数数组转化成为字符串[wxFormatArray方法]
*******************************************************/
public
function
wxMd5Sign(
$content
,
$privatekey
){
try
{
if
(
is_null
(
$privatekey
)) {
throw
new
Exception(
"财付通签名key不能为空!"
);
}
if
(
is_null
(
$content
)) {
throw
new
Exception(
"财付通签名内容不能为空"
);
}
$signStr
=
$content
.
"&key="
.
$privatekey
;
return
strtoupper
(md5(
$signStr
));
}
catch
(Exception
$e
)
{
die
(
$e
->getMessage());
}
}
/*******************************************************
* 微信Sha1签名生成器 - 需要将参数数组转化成为字符串[wxFormatArray方法]
*******************************************************/
public
function
wxSha1Sign(
$content
){
try
{
if
(
is_null
(
$content
)) {
throw
new
Exception(
"签名内容不能为空"
);
}
//$signStr = $content;
return
sha1(
$content
);
}
catch
(Exception
$e
)
{
die
(
$e
->getMessage());
}
}
/*******************************************************
* 微信jsApi整合方法 - 通过调用此方法获得jsapi数据
*******************************************************/
public
function
wxJsapiPackage(){
$jsapi_ticket
=
$this
->wxJsApiTicket();
// 注意 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
=
$this
->wxNonceStr();
$signPackage
=
array
(
"jsapi_ticket"
=>
$jsapi_ticket
,
"nonceStr"
=>
$nonceStr
,
"timestamp"
=>
$timestamp
,
"url"
=>
$url
);
// 这里参数的顺序要按照 key 值 ASCII 码升序排序
$rawString
=
"jsapi_ticket=$jsapi_ticket&noncestr=$nonceStr×tamp=$timestamp&url=$url"
;
//$rawString = $this->wxFormatArray($signPackage);
$signature
=
$this
->wxSha1Sign(
$rawString
);
$signPackage
[
'signature'
] =
$signature
;
$signPackage
[
'rawString'
] =
$rawString
;
$signPackage
[
'appId'
] = self::appId;
return
$signPackage
;
}
/*******************************************************
* 将数组解析XML - 微信红包接口
*******************************************************/
public
function
wxArrayToXml(
$parameters
= NULL){
if
(
is_null
(
$parameters
)){
$parameters
=
$this
->parameters;
}
if
(!
is_array
(
$parameters
) ||
empty
(
$parameters
)){
die
(
"参数不为数组无法解析"
);
}
$xml
=
"<xml>"
;
foreach
(
$arr
as
$key
=>
$val
)
{
if
(
is_numeric
(
$val
))
{
$xml
.=
"<"
.
$key
.
">"
.
$val
.
"</"
.
$key
.
">"
;
}
else
$xml
.=
"<"
.
$key
.
"><![CDATA["
.
$val
.
"]]></"
.
$key
.
">"
;
}
$xml
.=
"</xml>"
;
return
$xml
;
}
/*******************************************************
* 微信卡券:上传LOGO - 需要改写动态功能
*******************************************************/
public
function
wxCardUpdateImg() {
$wxAccessToken
=
$this
->wxAccessToken();
//$data['access_token'] = $wxAccessToken;
$data
[
'buffer'
] =
'@D:\\workspace\\htdocs\\yky_test\\logo.jpg'
;
$result
=
$this
->wxHttpsRequest(
$url
,
$data
);
$jsoninfo
= json_decode(
$result
, true);
return
$jsoninfo
;
//array(1) { ["url"]=> string(121) "http://mmbiz.qpic.cn/mmbiz/ibuYxPHqeXePNTW4ATKyias1Cf3zTKiars9PFPzF1k5icvXD7xW0kXUAxHDzkEPd9micCMCN0dcTJfW6Tnm93MiaAfRQ/0" }
}
/*******************************************************
* 微信卡券:获取颜色
*******************************************************/
public
function
wxCardColor(){
$wxAccessToken
=
$this
->wxAccessToken();
$result
=
$this
->wxHttpsRequest(
$url
);
$jsoninfo
= json_decode(
$result
, true);
return
$jsoninfo
;
}
/*******************************************************
* 微信卡券:创建卡券
*******************************************************/
public
function
wxCardCreated(
$jsonData
) {
$wxAccessToken
=
$this
->wxAccessToken();
$result
=
$this
->wxHttpsRequest(
$url
,
$jsonData
);
$jsoninfo
= json_decode(
$result
, true);
return
$jsoninfo
;
}
/*******************************************************
* 微信卡券:JSAPI 卡券Package - 基础参数没有附带任何值 - 再生产环境中需要根据实际情况进行修改
*******************************************************/
public
function
wxCardPackage(
$cardId
){
$timestamp
= time();
$api_ticket
=
$this
->wxJsApiTicket();
$cardId
=
$cardId
;
$arrays
=
array
(
$api_ticket
,
$timestamp
,
$cardId
);
sort(
$arrays
);
$string
= sha1(implode(
""
,
$arrays
));
$resultArray
[
'card_id'
] =
$cardId
;
$resultArray
[
'card_ext'
] =
array
();
$resultArray
[
'card_ext'
][
'openid'
] =
'oOmn4s9MiwqHSNNvPn0dBtU23toA'
;
$resultArray
[
'card_ext'
][
'timestamp'
] =
$timestamp
;
$resultArray
[
'card_ext'
][
'signature'
] =
$string
;
return
$resultArray
;
}
}
4. [代码]微信JSAPI
<?php
require_once
'lib.inc.php'
;
$wx
=
new
WxApi();
//通过网页获取openid
//if(!isset($_GET['code'])){
// header("location:https://open.weixin.qq.com/connect/oauth2/authorize?appid=".WxApi::appId."&redirect_uri=http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
//}
//else{
// $CODE = $_GET['code'];
// $Info = $wx->wxOauthAccessToken($CODE);
//print_r($Info);
// $openId = $Info['openid'];
//}
$signPackage
=
$wx
->wxJsapiPackage();
//print_r($signPackage);
$kqInfo
=
$wx
->wxCardPackage(
""
);
$listInfo
=
$wx
->wxCardListPackage();
?>
<html>
<head>
<title>JSAPI接口测试</title>
<meta charset=
"UTF-8"
>
<meta name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
>
</head>
<body>
<div>
<input type=
"button"
id=
"batchAddCard"
name=
"batchAddCard"
value=
"添加卡券"
/><br />
<input type=
"button"
id=
"openCard"
name=
"openCard"
value=
"拉起卡券库"
/><br />
<input type=
"button"
id=
"ShareTimeLine"
name=
"ShareTimeLine"
value=
"分享朋友圈"
/><br />
<div id=
"showInfo"
>
</div>
</div>
<script>
wx.config({
debug: false,
appId:
'<?php echo $signPackage["appId"];?>'
,
timestamp: <?php
echo
$signPackage
[
"timestamp"
];?>,
nonceStr:
'<?php echo $signPackage["nonceStr"];?>'
,
signature:
'<?php echo $signPackage["signature"];?>'
,
jsApiList: [
// 所有要调用的 API 都要加到这个列表中
'onMenuShareTimeline'
,
'onMenuShareAppMessage'
,
'addCard'
,
'openCard'
]
});
wx.ready(
function
() {
// 在这里调用 API
wx.onMenuShareAppMessage({
title:
'互联网之子'
,
desc:
'在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。'
,
trigger:
function
(res) {
// 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
alert(
'用户点击发送给朋友'
);
},
success:
function
(res) {
alert(
'已分享'
);
},
cancel:
function
(res) {
alert(
'已取消'
);
},
fail:
function
(res) {
alert(JSON.stringify(res));
}
});
document.querySelector(
'#ShareTimeLine'
).onclick =
function
() {
wx.onMenuShareTimeline({
title:
'互联网之子'
,
trigger:
function
(res) {
// 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
alert(
'用户点击分享到朋友圈'
);
},
success:
function
(res) {
alert(
'已分享'
);
},
cancel:
function
(res) {
alert(
'已取消'
);
},
fail:
function
(res) {
alert(JSON.stringify(res));
}
});
};
document.querySelector(
'#batchAddCard'
).onclick =
function
() {
wx.addCard({
cardList: [
{
cardId:
'p7G0Cj_1HGF2nijO4sTlVTzawFhI'
,
cardExt:
'{"timestamp":"<?php echo $kqInfo['
cardExt
']['
timestamp
'];?>", "signature":"<?php echo $kqInfo['
cardExt
']['
signature
'];?>"}'
}
],
success:
function
(res) {
var
cardList = res.cardList;
// 添加的卡券列表信息
alert(cardList);
},
cancel:
function
(res) {
alert(
'已取消'
);
},
fail:
function
(res) {
alert(JSON.stringify(res));
}
});
};
var
shareData = {
title:
'微信JS-SDK Demo'
,
desc:
'微信JS-SDK,帮助第三方为用户提供更优质的移动web服务'
,
};
wx.onMenuShareAppMessage(shareData);
wx.onMenuShareTimeline(shareData);
});
var
readyFunc =
function
onBridgeReady() {
// 绑定关注事件
document.querySelector(
'#openCard'
).addEventListener(
'click'
,
function
(e) {
WeixinJSBridge.invoke(
'chooseCard'
, {
"app_id"
:
"<?php echo $listInfo['app_id']?>"
,
"location_id "
:
''
,
"sign_type"
:
"SHA1"
,
"card_sign"
:
"<?php echo $listInfo['card_sign']?>"
,
"card_id"
:
"<?php echo $listInfo['card_id']?>"
,
"card_type"
:
"<?php echo $listInfo['card_type']?>"
,
"time_stamp"
:
"<?php echo $listInfo['time_stamp']?>"
,
"nonce_str"
:
"<?php echo $listInfo['nonce_str']?>"
},
function
(res) {
alert(res.err_msg + res.choose_card_info);
$(
"#showInfo"
).
empty
().append(res.err_msg + res.choose_card_info);
});
});
}
if
(typeof WeixinJSBridge ===
"undefined"
) {
document.addEventListener(
'WeixinJSBridgeReady'
, readyFunc, false);
}
else
{
readyFunc();
}
</script>
</body>
</html>
5. [代码]创建卡券
$kqinfo
=
array
(
"card"
=>
array
());
$kqinfo
[
'card'
][
'card_type'
] =
'GENERAL_COUPON'
;
$kqinfo
[
'card'
][
'general_coupon'
] =
array
(
'base_info'
=>
array
(),
'default_detail'
=>
array
());
$kqinfo
[
'card'
][
'general_coupon'
][
'base_info'
][
'logo_url'
] =
'URL'
;
$kqinfo
[
'card'
][
'general_coupon'
][
'base_info'
][
'code_type'
] =
'CODE_TYPE_QRCODE'
;
$kqinfo
[
'card'
][
'general_coupon'
][
'base_info'
][
'brand_name'
] =
''
;
$kqinfo
[
'card'
][
'general_coupon'
][
'base_info'
][
'title'
] =
'测试卡券'
;
$kqinfo
[
'card'
][
'general_coupon'
][
'base_info'
][
'color'
] =
'Color030'
;
$kqinfo
[
'card'
][
'general_coupon'
][
'base_info'
][
'notice'
] =
'测试测试测试'
;
$kqinfo
[
'card'
][
'general_coupon'
][
'base_info'
][
'description'
] =
'这是一张优惠券'
;
$kqinfo
[
'card'
][
'general_coupon'
][
'base_info'
][
'date_info'
][
'type'
] = 1;
$kqinfo
[
'card'
][
'general_coupon'
][
'base_info'
][
'date_info'
][
'begin_timestamp'
] = time();
$kqinfo
[
'card'
][
'general_coupon'
][
'base_info'
][
'date_info'
][
'end_timestamp'
] = time() + 100 * 24 * 3600;
$kqinfo
[
'card'
][
'general_coupon'
][
'base_info'
][
'sku'
][
'quantity'
] = 100000;
$kqinfo
[
'card'
][
'general_coupon'
][
'default_detail'
] =
'测试数据\n测试数据\n测试数据'
;
//var_dump($kqinfo);
//$kqinfo = json_encode($kqinfo);
$kqinfo
= C::enJson(
$kqinfo
);
//print_r( $kqinfo);
//$resultData = $wx->wxCardCreated($kqinfo);
以上所述就是本文的全部内容,希望大家能够喜欢。
在此感谢大家的一路相陪,希望大家在新的一年里身体健康,万事如意,心想事成,财源滚滚~~~