Skip to content

Commit

Permalink
Merge pull request dodgepudding#277 from nfer/master
Browse files Browse the repository at this point in the history
add more comments on getQRCode functions; re-implement some code
  • Loading branch information
dodgepudding committed Jan 1, 2016
2 parents 51ed9ee + 135827c commit a5d5297
Show file tree
Hide file tree
Showing 3 changed files with 265 additions and 8 deletions.
45 changes: 45 additions & 0 deletions test/getQRCode_test.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php
/**
* 微信公共接口测试
*
*/
include("../wechat.class.php");

function logdebug($text){
file_put_contents('../data/log.txt',$text."\n",FILE_APPEND);
};
$options = array(
'token'=>'tokenaccesskey', //填写你设定的key
'debug'=>true,
'logcallback'=>'logdebug'
);
$weObj = new Wechat($options);

// check null $scene_id
$qrcode = $weObj->getQRCode();
if ($qrcode != false) {
echo "test failed.\n";
die();
}

// check bad $type
$qrcode = $weObj->getQRCode(123, -1);
if ($qrcode != false) { echo "test failed.\n"; die();}

// check bad $type
$qrcode = $weObj->getQRCode(123, 5);
if ($qrcode != false) { echo "test failed.\n"; die();}

// check bad $scene_id
$qrcode = $weObj->getQRCode('ad', 0);
if ($qrcode != false) { echo "test failed.\n"; die();}

// check bad $scene_id
$qrcode = $weObj->getQRCode('ad', 1);
if ($qrcode != false) { echo "test failed.\n"; die();}

// check bad $scene_id
$qrcode = $weObj->getQRCode(123, 2);
if ($qrcode != false) { echo "test failed.\n"; die();}

echo "test passed.\n";
16 changes: 16 additions & 0 deletions test/merchanttest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php
include "../wechat.class.php";

$options = array(
'token'=>'XXXXXX', //填写你设定的key
'encodingaeskey'=>'XXXXXX', //填写加密用的EncodingAESKey,如接口为明文模式可忽略
'appid'=>'XXXXXX', //填写高级调用功能的app id
'appsecret'=>'XXXXXX' //填写高级调用功能的密钥
);
$weObj = new Wechat($options);

$order = $weObj->getOrderByID("13791169361138306965");
var_dump($order);

$order = $weObj->getOrderByFilter();
var_dump($order);
212 changes: 204 additions & 8 deletions wechat.class.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ class Wechat
const EVENT_CARD_NOTPASS = 'card_not_pass_check'; //卡券 - 审核未通过
const EVENT_CARD_USER_GET = 'user_get_card'; //卡券 - 用户领取卡券
const EVENT_CARD_USER_DEL = 'user_del_card'; //卡券 - 用户删除卡券
const EVENT_MERCHANT_ORDER = 'merchant_order'; //微信小店 - 订单付款通知
const API_URL_PREFIX = 'https://api.weixin.qq.com/cgi-bin';
const AUTH_URL = '/token?grant_type=client_credential&';
const MENU_CREATE_URL = '/menu/create?';
Expand Down Expand Up @@ -204,6 +205,11 @@ class Wechat
const SHAKEAROUND_USER_GETSHAKEINFO = '/shakearound/user/getshakeinfo?';//获取摇周边的设备及用户信息
const SHAKEAROUND_STATISTICS_DEVICE = '/shakearound/statistics/device?';//以设备为维度的数据统计接口
const SHAKEAROUND_STATISTICS_PAGE = '/shakearound/statistics/page?';//以页面为维度的数据统计接口
///微信小店相关接口
const MERCHANT_ORDER_GETBYID = '/merchant/order/getbyid?';//根据订单ID获取订单详情
const MERCHANT_ORDER_GETBYFILTER = '/merchant/order/getbyfilter?';//根据订单状态/创建时间获取订单详情
const MERCHANT_ORDER_SETDELIVERY = '/merchant/order/setdelivery?';//设置订单发货信息
const MERCHANT_ORDER_CLOSE = '/merchant/order/close?';//关闭订单

private $token;
private $encodingAesKey;
Expand Down Expand Up @@ -810,6 +816,18 @@ public function getRevCardDel(){
}
}

/**
* 获取订单ID - 订单付款通知
* 当Event为 merchant_order(订单付款通知)
* @return orderId|boolean
*/
public function getRevOrderId(){
if (isset($this->_receive['OrderId'])) //订单 ID
return $this->_receive['OrderId'];
else
return false;
}

public static function xmlSafeStr($str)
{
return '<![CDATA['.preg_replace("/[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]/",'',$str).']]>';
Expand Down Expand Up @@ -1297,6 +1315,7 @@ public function getJsSign($url, $timestamp=0, $noncestr='', $appid=''){
* @param array $arr
*/
static function json_encode($arr) {
if (count($arr) == 0) return "[]";
$parts = array ();
$is_list = false;
//Find out if the given array is a numerical array
Expand Down Expand Up @@ -2030,24 +2049,50 @@ public function queryMassMessage($msg_id){
/**
* 创建二维码ticket
* @param int|string $scene_id 自定义追踪id,临时二维码只能用数值型
* @param int $type 0:临时二维码;1:永久二维码(此时expire参数无效);2:永久二维码(此时expire参数无效)
* @param int $type 0:临时二维码;1:数值型永久二维码(此时expire参数无效);2:字符串型永久二维码(此时expire参数无效)
* @param int $expire 临时二维码有效期,最大为604800秒
* @return array('ticket'=>'qrcode字串','expire_seconds'=>604800,'url'=>'二维码图片解析后的地址')
*/
public function getQRCode($scene_id,$type=0,$expire=604800){
if (!$this->access_token && !$this->checkAuth()) return false;
$type = ($type && is_string($scene_id))?2:$type;
if (!isset($scene_id)) return false;
switch ($type) {
case '0':
if (!is_numeric($scene_id))
return false;
$action_name = 'QR_SCENE';
$action_info = array('scene'=>(array('scene_id'=>$scene_id)));
break;

case '1':
if (!is_numeric($scene_id))
return false;
$action_name = 'QR_LIMIT_SCENE';
$action_info = array('scene'=>(array('scene_id'=>$scene_id)));
break;

case '2':
if (!is_string($scene_id))
return false;
$action_name = 'QR_LIMIT_STR_SCENE';
$action_info = array('scene'=>(array('scene_str'=>$scene_id)));
break;

default:
return false;
}

$data = array(
'action_name'=>$type?($type == 2?"QR_LIMIT_STR_SCENE":"QR_LIMIT_SCENE"):"QR_SCENE",
'expire_seconds'=>$expire,
'action_info'=>array('scene'=>($type == 2?array('scene_str'=>$scene_id):array('scene_id'=>$scene_id)))
'action_name' => $action_name,
'expire_seconds' => $expire,
'action_info' => $action_info
);
if ($type == 1) {
if ($type) {
unset($data['expire_seconds']);
}

$result = $this->http_post(self::API_URL_PREFIX.self::QRCODE_CREATE_URL.'access_token='.$this->access_token,self::json_encode($data));
if ($result)
{
if ($result) {
$json = json_decode($result,true);
if (!$json || !empty($json['errcode'])) {
$this->errCode = $json['errcode'];
Expand Down Expand Up @@ -4202,6 +4247,157 @@ public function pageShakeAroundStatistics($page_id,$begin_date,$end_date){
}
return false;
}

/**
* 根据订单ID获取订单详情
* @param string $order_id 订单ID
* @return order array|bool
*/
public function getOrderByID($order_id){
if (!$this->access_token && !$this->checkAuth()) return false;
if (!$order_id) return false;

$data = array(
'order_id'=>$order_id
);
$result = $this->http_post(self::API_BASE_URL_PREFIX.self::MERCHANT_ORDER_GETBYID.'access_token='.$this->access_token, self::json_encode($data));
if ($result)
{
$json = json_decode($result,true);
if (isset($json['errcode']) && $json['errcode']) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return $json['order'];
}
return false;
}

/**
* 根据订单状态/创建时间获取订单详情
* @param int $status 订单状态(不带该字段-全部状态, 2-待发货, 3-已发货, 5-已完成, 8-维权中, )
* @param int $begintime 订单创建时间起始时间(不带该字段则不按照时间做筛选)
* @param int $endtime 订单创建时间终止时间(不带该字段则不按照时间做筛选)
* @return order list array|bool
*/
public function getOrderByFilter($status = null, $begintime = null, $endtime = null){
if (!$this->access_token && !$this->checkAuth()) return false;

$data = [];

$valid_status = array(2, 3, 5, 8);
if (is_numeric($status) && in_array($status, $valid_status)) {
$data['status'] = $status;
}

if (is_numeric($begintime) && is_numeric($endtime)) {
$data['begintime'] = $begintime;
$data['endtime'] = $endtime;
}
$result = $this->http_post(self::API_BASE_URL_PREFIX.self::MERCHANT_ORDER_GETBYFILTER.'access_token='.$this->access_token, self::json_encode($data));
if ($result)
{
$json = json_decode($result,true);
if (isset($json['errcode']) && $json['errcode']) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return $json['order_list'];
}
return false;
}

/**
* 设置订单发货信息
* @param string $order_id 订单 ID
* @param int $need_delivery 商品是否需要物流(0-不需要,1-需要)
* @param string $delivery_company 物流公司 ID
* @param string $delivery_track_no 运单 ID
* @param int $is_others 是否为 6.4.5 表之外的其它物流公司(0-否,1-是)
* @return bool
*/
public function setOrderDelivery($order_id, $need_delivery = 0, $delivery_company = null, $delivery_track_no = null, $is_others = 0){
if (!$this->access_token && !$this->checkAuth()) return false;
if (!$order_id) return false;

$data = [];
$data['order_id'] = $order_id;
if ($need_delivery) {
$data['delivery_company'] = $delivery_company;
$data['delivery_track_no'] = $delivery_track_no;
$data['is_others'] = $is_others;
}
else {
$data['need_delivery'] = $need_delivery;
}

$result = $this->http_post(self::API_BASE_URL_PREFIX.self::MERCHANT_ORDER_SETDELIVERY.'access_token='.$this->access_token, self::json_encode($data));
if ($result)
{
$json = json_decode($result,true);
if (isset($json['errcode']) && $json['errcode']) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return true;
}
return false;
}

/**
* 关闭订单
* @param string $order_id 订单 ID
* @return bool
*/
public function closeOrder($order_id){
if (!$this->access_token && !$this->checkAuth()) return false;
if (!$order_id) return false;

$data = array(
'order_id'=>$order_id
);

$result = $this->http_post(self::API_BASE_URL_PREFIX.self::MERCHANT_ORDER_CLOSE.'access_token='.$this->access_token, self::json_encode($data));
if ($result)
{
$json = json_decode($result,true);
if (isset($json['errcode']) && $json['errcode']) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return true;
}
return false;
}

private function parseSkuInfo($skuInfo) {
$skuInfo = str_replace("\$", "", $skuInfo);
$matches = explode(";", $skuInfo);

$result = [];
foreach ($matches as $matche) {
$arrs = explode(":", $matche);
$result[$arrs[0]] = $arrs[1];
}

return $result;
}

/**
* 获取订单SkuInfo - 订单付款通知
* 当Event为 merchant_order(订单付款通知)
* @return array|boolean
*/
public function getRevOrderSkuInfo(){
if (isset($this->_receive['SkuInfo'])) //订单 SkuInfo
return $this->parseSkuInfo($this->_receive['SkuInfo']);
else
return false;
}
}
/**
* PKCS7Encoder class
Expand Down

0 comments on commit a5d5297

Please sign in to comment.