php一个文件搞定微信jssdk配置:

本文给大家介绍的是个人总结的一些微信API接口,包括微信支付、微信红包、微信卡券、微信小店等,十分的全面,有需要的小伙伴可以参考下。

包括缓存,包括https通讯,获取微信access_token,签名什么的都有。但是防范性编程做得比较少,商业用的话,需要完善下代码。

  1. [代码]index.php

使用姿势

<?php

^ajax(Common.ServerUrl + "GetWX.php", { data: { Type: "config", url: location.href.split[0] }, dataType: 'json', type: 'get', timeout: 5000, success: function { wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '……', // 必填,公众号的唯一标识 timestamp: data.timestamp, // 必填,生成签名的时间戳 nonceStr: data.nonceStr, // 必填,生成签名的随机串 signature: data.signature, // 必填,签名,见附录1 jsApiList: ["getLocation"] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); }})wx.ready { wx.getLocation({ type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' success: function { var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90 var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。 plus2.storage.setItem; plus2.storage.setItem("longitude", longitude); } });});

include_once 'lib.inc.php'``;

服务端

 

$jsapi_ticket, "nonceStr"=>$nonceStr,"timestamp"=>$timestamp,"url"=>$url,"signature"=>$signature); echo json_encode; } function getSignature($jsapi_ticket,$noncestr, $timestamp, $url){ $string1 = "jsapi_ticket=".$jsapi_ticket."&noncestr=".$noncestr."&timestamp=".$timestamp."&url=".$url; $sha1 = sha1; return $sha1; } function getJsapi_ticket(){ $cache = new Cache(); $cache = new Cache; //需要创建cache文件夹存储缓存文件。 //从缓存从读取键值 $key 的数据 $jsapi_ticket = $cache -> get; $access_token = getAccess_token(); //如果没有缓存数据 if ($jsapi_ticket == false) { $access_token = getAccess_token(); $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket'; $data = array('type'=>'jsapi','access_token'=>$access_token); $header = array(); $response = json_decode(curl_https($url, $data, $header, 5)); $jsapi_ticket = $response->ticket; //写入键值 $key 的数据 $cache -> put("jsapi_ticket", $jsapi_ticket); } return $jsapi_ticket; } function getAccess_token(){ $cache = new Cache(); $cache = new Cache; //从缓存从读取键值 $key 的数据 $access_token = $cache -> get; //如果没有缓存数据 if ($access_token == false) { $url = 'https://api.weixin.qq.com/cgi-bin/token'; $data = array('grant_type'=>'client_credential','appid'=>$APPID,'secret'=>$SECRET); $header = array(); $response = json_decode(curl_https($url, $data, $header, 5)); $access_token = $response->access_token; //写入键值 $key 的数据 $cache -> put("access_token", $access_token); } return $access_token; } /** curl 获取 https 请求 * @param String $url 请求的url * @param Array $data 要发送的数据 * @param Array $header 请求时发送的header * @param int $timeout 超时时间,默认30s */ function curl_https, $header=array{ $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); $response = curl_exec; if($error=curl_error; } curl_close; return $response; } ?>

$wcObj = ``new WeChat(``"YOUKUIYUAN"``);

Cache.php 不知道哪位写的源代码~

$wcObj``->wcValid();

 cache_expire = $exp_time; $this -> cache_path = $path; } //returns the filename for the cache private function fileName { return $this -> cache_path . md5; } //creates new cache files with the given data, $key== name of the cache, data the info/values to store public function put { $values = serialize; $filename = $this -> fileName; $file = fopen; if  {//able to create the file fwrite; fclose; } else return false; } //returns cache for the given key public function get { $filename = $this -> fileName; if (!file_exists || !is_readable {//can't read the cache return false; } if  <  + $this -> cache_expire)) {//cache for the key not expired $file = fopen; // read data file if  {//able to open the file $data = fread($file, filesize; fclose; return unserialize; //return the values } else return false; } else return false; //was expired you need to create new }}?>
  1. [代码]微信入口类    

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

<?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;

``}

 

}

  1. [代码]微信操作类 – 更新了自定义菜单部分

<?php

``/********************************************************

``*   @author Kyler You <QQ:2444756311>

``*   @link http://mp.weixin.qq.com/wiki/home/index.html

``*   @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:$errorn"``;

``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();

``$url   
= ``"https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token="``.``$wxAccessToken``;

``$result    
= ``$this``->wxHttpsRequest(``$url``,``$jsonData``);

``return $result``;

``}

 

``/****************************************************

``* 微信通过ticket生成二维码

``****************************************************/

``public function wxQrCode(``$ticket``){

``$url 
= ``"https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="
. urlencode(``$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();

``$url     
= ``"https://api.weixin.qq.com/cgi-bin/menu/create?access_token="
. ``$wxAccessToken``;

``$result    
= ``$this``->wxHttpsRequest(``$url``,``$jsonData``);

``$jsoninfo    = json_decode(``$result``, true);

``return $jsoninfo``;

``}

 

``/****************************************************

``* 获取自定义菜单

``****************************************************/

 

``public function wxMenuGet(){

``$wxAccessToken = ``$this``->wxAccessToken();

``$url     
= ``"https://api.weixin.qq.com/cgi-bin/menu/get?access_token="
. ``$wxAccessToken``;

``$result     = ``$this``->wxHttpsRequest(``$url``);

``$jsoninfo    = json_decode(``$result``, true);

``return $jsoninfo``;

``}

 

``/****************************************************

``* 删除自定义菜单

``****************************************************/

 

``public function wxMenuDelete(){

``$wxAccessToken = ``$this``->wxAccessToken();

``$url     
= ``"https://api.weixin.qq.com/cgi-bin/menu/delete?access_token="
. ``$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'``;

``$url     
= ``"https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token="``.``$wxAccessToken``;

``$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();

``$url       
= ``"https://api.weixin.qq.com/card/getcolors?access_token="``.``$wxAccessToken``;

``$result     = ``$this``->wxHttpsRequest(``$url``);

``$jsoninfo    = json_decode(``$result``, true);

``return $jsoninfo``;

``}

 

``/*******************************************************

``*   微信卡券:创建卡券

``*******************************************************/

``public function wxCardCreated(``$jsonData``) {

``$wxAccessToken = ``$this``->wxAccessToken();

``$url     
= ``"https://api.weixin.qq.com/card/create?access_token="
. ``$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``;

``}

 

 

``}

  1. [代码]微信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"``>

 

``<script src=``"http://code.jquery.com/jquery-1.11.2.min.js"``></script>

``<script src=``"http://res.wx.qq.com/open/js/jweixin-1.0.0.js"``></script>

``</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: ``'在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。'``,

``link: ``'http://movie.douban.com/subject/25785114/'``,

``imgUrl: ``'http://demo.open.weixin.qq.com/jssdkp2166127561.jpg'``,

``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: ``'互联网之子'``,

``link: ``'http://movie.douban.com/subject/25785114/'``,

``imgUrl: ``'http://demo.open.weixin.qq.com/jssdkp2166127561.jpg'``,

``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服务'``,

``link: ``'http://demo.open.weixin.qq.com/jssdk/'``,

``imgUrl: ``'http://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRt8Qia4lv7k3M9J1SKqKCImxJCt7j9rHYicKDI45jRPBxdzdyREWnk0ia0N5TMnMfth7SdxtzMvVgXg/0'

``};

 

``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>

  1. [代码]创建卡券 

$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);

 

以上所述就是本文的全部内容,希望大家能够喜欢。

在此感谢大家的一路相陪,希望大家在新的一年里身体健康,万事如意,心想事成,财源滚滚~~~

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章