627 行
27 KiB
PHP
可执行文件
627 行
27 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace CashierApi\Controller;
|
||
|
||
use Pay\Controller\CloudPayController;
|
||
use Think\Controller;
|
||
|
||
//[1.6.31]
|
||
class SelfHelpCashierController extends BaseController
|
||
{
|
||
/**
|
||
* 自助收银支付
|
||
* @param string $order_no 订单号
|
||
* @param int $pay_type 支付类型 1.微信 2.支付宝
|
||
* @param int $all_money 金额
|
||
* @return array $res
|
||
*/
|
||
public function SelfHelpCashierPay()
|
||
{
|
||
// 接受数据
|
||
$order_no = I('post.order_no');
|
||
$pay_type = I('post.pay_type');
|
||
$all_money = I('post.all_money');
|
||
$vid = I('post.vid');
|
||
$coupon_id = I('post.coupon_id');
|
||
$discount = I('post.discount') ? I('post.discount') : 1;
|
||
$small_changes_money = I('post.small_changes_money') ? I('post.small_changes_money') : 0;
|
||
$integral_cashing = I('post.integral_cashing') == 1 ? 1 : 0;
|
||
$guide_id = I('post.guide_id') ? I('post.guide_id') : 0;
|
||
// 判断订单号
|
||
if (!$order_no) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断支付类型
|
||
if (!in_array($pay_type, array('1', '2'))) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '支付类型有误'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断金额
|
||
if (!verifyPrice($all_money)) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '订单金额有误'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 查询bill订单
|
||
$BillModel = D('RetailBillOrder');
|
||
$map = array(
|
||
'b.' . $BillModel::ORDER_NO => strval($order_no),
|
||
'b.' . $BillModel::MERCHANT_ID => self::$merchant_id,
|
||
'b.' . $BillModel::STORE_ID => self::$store_id,
|
||
);
|
||
$bill_order = $BillModel->getOrderLinkFind($map);
|
||
if (!$bill_order) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '订单查询失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 验证金额
|
||
$CashierModel = D('RetailCashier');
|
||
$StoreModel = D('RetailStore');
|
||
$item = array(
|
||
'bill_order' => $bill_order,
|
||
'vid' => $vid, //会员id
|
||
'coupon_id' => $coupon_id, //优惠券id
|
||
'discount' => $discount, //收银员手动打折折扣值
|
||
'small_changes_money' => $small_changes_money, //抹零金额
|
||
'allMoney' => $all_money, //前台计算的总价
|
||
'integral_cashing' => $integral_cashing, //积分抵现开启状态
|
||
'guide_id' => $guide_id, //导购员id
|
||
'cashier_preferential_state' => self::$cashier[$CashierModel::PREFERENTIAL_STATE],//收银员打折权限
|
||
'store_preferential_state' => self::$store[$StoreModel::PREFERENTIAL_STATE],//门店打折权限
|
||
'guide_open_state' => self::$store[$StoreModel::GUIDE_OPEN_STATE],//导购员分佣开启状态
|
||
);
|
||
$calculation = A('PayApi/Order')->calculationOrder_v1($item);//重新计算该付的金额
|
||
if ($calculation['status'] == 1) {
|
||
$bill_order = $calculation['order'];
|
||
if (round($bill_order[$BillModel::ALL_MONEY] - $all_money) < 0) {
|
||
$result['all_money'] = $bill_order[$BillModel::ALL_MONEY];
|
||
$result['status'] = 0;
|
||
$result['msg'] = '支付金额超出订单总额1';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
$bill_order[$BillModel::GUIDE_ID] = $guide_id;
|
||
$bill_order[$BillModel::PAY_STATE] = 2;
|
||
$bill_order[$BillModel::PAY_TYPE] = $pay_type == 1 ? 3 : 4;//1现金 3微信支付 4支付宝支付 5会员卡余额支付 6小程序商城微信支付 7其他支付方式 8组合支付
|
||
$update = $BillModel->updateOrder(array($BillModel::ID => $bill_order[$BillModel::ID]), $bill_order);
|
||
if (!$update) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '订单更新失败,请重试';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
} else {
|
||
$this->ajaxReturn($calculation);
|
||
}
|
||
// pay_order表模型
|
||
$RPOModel = D('RetailPayOrder');
|
||
// 支付
|
||
if ($pay_type == 1) {
|
||
$payOrderItem[$RPOModel::PAY_TYPE] = 1;
|
||
} else {
|
||
$payOrderItem[$RPOModel::PAY_TYPE] = 2;
|
||
}
|
||
// 查询商户支付模式设置
|
||
$RPSModel = D('RetailPaySet');
|
||
$pay_set = $RPSModel->getFindMerchantConfig(self::$merchant_id, $pay_type);
|
||
if ($pay_set['status'] != 1) {
|
||
$res = array('status' => 0, 'msg' => $pay_set['msg']);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 商户支付设置
|
||
$config = $pay_set['config'];
|
||
$RMModel = D('RetailMerchant'); // 商户表模型
|
||
$config['body'] = self::$merchant[$RMModel::NAME] . '-' . self::$store[$StoreModel::STORE_NAME];
|
||
// 下单(pay_order)
|
||
$payOrderItem[$RPOModel::M_PAY_TYPE] = $pay_set['m_pay_type'];
|
||
$payOrderItem[$RPOModel::ORDER_TYPE] = 1;
|
||
$payOrderItem[$RPOModel::PAY_TYPE] = $pay_type;
|
||
$payOrderItem[$RPOModel::TRADE_AMOUNT] = $all_money;
|
||
$payOrderItem[$RPOModel::STORE_ID] = self::$store_id;
|
||
$payOrderItem[$RPOModel::MERCHANT_ID] = self::$merchant_id;
|
||
$payOrderItem[$RPOModel::CASHIER_ID] = self::$cashier_id;
|
||
$payOrderItem[$RPOModel::VID] = 0;
|
||
$payOrderItem[$RPOModel::ORDER_STATE] = 'WAIT_BUYER_PAY';
|
||
$payOrderItem[$RPOModel::ADD_TIME] = time();
|
||
$payOrderItem[$RPOModel::BILL_ID] = $bill_order[$BillModel::ID];
|
||
$payOrderItem[$RPOModel::NOTIFY_URL] = 'NotifyApi/SelfHelpCashier/newPayNotifyUrl';
|
||
$add_order = $RPOModel->addPayOrder($payOrderItem);
|
||
// 判断下单
|
||
if (!$add_order) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$store_name = self::$store[$StoreModel::STORE_NAME];
|
||
// 新大陆或微信或支付宝下单
|
||
if ($add_order[$RPOModel::M_PAY_TYPE] == 3) { // 新大陆
|
||
$res = A('Pay/PayContinent')->sweepCodePay($add_order);
|
||
if ($res['status'] == 0) {
|
||
$this->ajaxReturn($res);
|
||
}
|
||
} else if ($add_order[$RPOModel::M_PAY_TYPE] == 4) { // 云闪付
|
||
$payObj = new CloudPayController();
|
||
$res = $payObj->cloudPaybarCodeAll($add_order,$config, $pay_type,$store_name);
|
||
if ($res['status'] == 0) {
|
||
$this->ajaxReturn($res);
|
||
}
|
||
} else if ($pay_type == 1) { // 微信
|
||
$wx_result = A("Api/PaymentCodes")->createWxPayOrder($add_order, $config, $store_name, 1);
|
||
if ($wx_result['status'] == 0) {
|
||
$this->ajaxReturn($wx_result);
|
||
}
|
||
$res['qr_code'] = $wx_result['data']['code_url'];
|
||
} else if ($pay_type == 2) { // 支付宝
|
||
$al_result = A("Api/PaymentCodes")->createAliPayOrder($add_order, $config, $store_name, 1);
|
||
if ($al_result['status'] == 0) {
|
||
$this->ajaxReturn($al_result);
|
||
}
|
||
$res['qr_code'] = $al_result['qr_code'];
|
||
} else {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '支付类型有误'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$res['status'] = 1;
|
||
$res['out_trade_no'] = $add_order[$RPOModel::OUT_TRADE_NO];
|
||
$res['msg'] = '下单成功';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
/**
|
||
* 自助收银支付
|
||
* @param string $order_no 订单号
|
||
* @param int $pay_type 支付类型 1.微信 2.支付宝
|
||
* @param int $all_money 金额
|
||
* @return array $res
|
||
*/
|
||
public function SelfHelpCashierPay_v2()
|
||
{
|
||
// 接受数据
|
||
$order_no = I('post.order_no');
|
||
$pay_type = I('post.pay_type');
|
||
$all_money = I('post.all_money');
|
||
$vid = I('post.vid');
|
||
$coupon_id = I('post.coupon_id');
|
||
$discount = I('post.discount') ? I('post.discount') : 1;
|
||
$small_changes_money = I('post.small_changes_money') ? I('post.small_changes_money') : 0;
|
||
$integral_cashing = I('post.integral_cashing') == 1 ? 1 : 0;
|
||
$guide_id = I('post.guide_id') ? I('post.guide_id') : 0;
|
||
$integral_dis_num = I('post.integral_dis_num')?I('post.integral_dis_num'):0; //扣除的总积分
|
||
$integral_dis_money = I('post.integral_dis_money')?I('post.integral_dis_money'):0; //抵现积分的金额
|
||
// 判断订单号
|
||
if (!$order_no) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断支付类型
|
||
if (!in_array($pay_type, array('1', '2'))) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '支付类型有误'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断金额
|
||
if (!verifyPrice($all_money)) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '订单金额有误'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 查询bill订单
|
||
$BillModel = D('RetailBillOrder');
|
||
$map = array(
|
||
'b.' . $BillModel::ORDER_NO => strval($order_no),
|
||
'b.' . $BillModel::MERCHANT_ID => self::$merchant_id,
|
||
'b.' . $BillModel::STORE_ID => self::$store_id,
|
||
);
|
||
$bill_order = $BillModel->getOrderLinkFind($map);
|
||
if (!$bill_order) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '订单查询失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 验证金额
|
||
$CashierModel = D('RetailCashier');
|
||
$StoreModel = D('RetailStore');
|
||
$item = array(
|
||
'bill_order' => $bill_order,
|
||
'vid' => $vid, //会员id
|
||
'coupon_id' => $coupon_id, //优惠券id
|
||
'discount' => $discount, //收银员手动打折折扣值
|
||
'small_changes_money' => $small_changes_money, //抹零金额
|
||
'allMoney' => $all_money, //前台计算的总价
|
||
'integral_cashing' => $integral_cashing, //积分抵现开启状态
|
||
'guide_id' => $guide_id, //导购员id
|
||
'integral_dis_money' => $integral_dis_money, //积分抵现开启抵现的金额
|
||
'integral_dis_num' => $integral_dis_num, //积分抵现开启状态抵现的积分
|
||
'cashier_preferential_state' => self::$cashier[$CashierModel::PREFERENTIAL_STATE],//收银员打折权限
|
||
'store_preferential_state' => self::$store[$StoreModel::PREFERENTIAL_STATE],//门店打折权限
|
||
'guide_open_state' => self::$store[$StoreModel::GUIDE_OPEN_STATE],//导购员分佣开启状态
|
||
);
|
||
$calculation = A('PayApi/Order')->calculationOrder_v2($item);//重新计算该付的金额
|
||
if ($calculation['status'] == 1) {
|
||
$bill_order = $calculation['order'];
|
||
if (round($bill_order[$BillModel::ALL_MONEY] - $all_money) < 0) {
|
||
$result['all_money'] = $bill_order[$BillModel::ALL_MONEY];
|
||
$result['status'] = 0;
|
||
$result['msg'] = '支付金额超出订单总额1';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
$bill_order[$BillModel::GUIDE_ID] = $guide_id;
|
||
$bill_order[$BillModel::PAY_STATE] = 2;
|
||
$bill_order[$BillModel::PAY_TYPE] = $pay_type == 1 ? 3 : 4;//1现金 3微信支付 4支付宝支付 5会员卡余额支付 6小程序商城微信支付 7其他支付方式 8组合支付
|
||
$update = $BillModel->updateOrder(array($BillModel::ID => $bill_order[$BillModel::ID]), $bill_order);
|
||
if (!$update) {
|
||
$result['status'] = 0;
|
||
$result['msg'] = '订单更新失败,请重试';
|
||
$this->ajaxReturn($result);
|
||
}
|
||
} else {
|
||
$this->ajaxReturn($calculation);
|
||
}
|
||
// pay_order表模型
|
||
$RPOModel = D('RetailPayOrder');
|
||
// 支付
|
||
if ($pay_type == 1) {
|
||
$payOrderItem[$RPOModel::PAY_TYPE] = 1;
|
||
} else {
|
||
$payOrderItem[$RPOModel::PAY_TYPE] = 2;
|
||
}
|
||
// 查询商户支付模式设置
|
||
$RPSModel = D('RetailPaySet');
|
||
$pay_set = $RPSModel->getFindMerchantConfig(self::$merchant_id, $pay_type);
|
||
if ($pay_set['status'] != 1) {
|
||
$res = array('status' => 0, 'msg' => $pay_set['msg']);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 商户支付设置
|
||
$config = $pay_set['config'];
|
||
$RMModel = D('RetailMerchant'); // 商户表模型
|
||
$config['body'] = self::$merchant[$RMModel::NAME] . '-' . self::$store[$StoreModel::STORE_NAME];
|
||
// 下单(pay_order)
|
||
$payOrderItem[$RPOModel::M_PAY_TYPE] = $pay_set['m_pay_type'];
|
||
$payOrderItem[$RPOModel::ORDER_TYPE] = 1;
|
||
$payOrderItem[$RPOModel::PAY_TYPE] = $pay_type;
|
||
$payOrderItem[$RPOModel::TRADE_AMOUNT] = $all_money;
|
||
$payOrderItem[$RPOModel::STORE_ID] = self::$store_id;
|
||
$payOrderItem[$RPOModel::MERCHANT_ID] = self::$merchant_id;
|
||
$payOrderItem[$RPOModel::CASHIER_ID] = self::$cashier_id;
|
||
$payOrderItem[$RPOModel::VID] = 0;
|
||
$payOrderItem[$RPOModel::ORDER_STATE] = 'WAIT_BUYER_PAY';
|
||
$payOrderItem[$RPOModel::ADD_TIME] = time();
|
||
$payOrderItem[$RPOModel::BILL_ID] = $bill_order[$BillModel::ID];
|
||
$payOrderItem[$RPOModel::NOTIFY_URL] = 'NotifyApi/SelfHelpCashier/newPayNotifyUrl';
|
||
$add_order = $RPOModel->addPayOrder($payOrderItem);
|
||
// 判断下单
|
||
if (!$add_order) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '下单失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$store_name = self::$store[$StoreModel::STORE_NAME];
|
||
// 新大陆或微信或支付宝下单
|
||
if ($add_order[$RPOModel::M_PAY_TYPE] == 3) { // 新大陆
|
||
$res = A('Pay/PayContinent')->sweepCodePay($add_order);
|
||
if ($res['status'] == 0) {
|
||
$this->ajaxReturn($res);
|
||
}
|
||
} else if ($add_order[$RPOModel::M_PAY_TYPE] == 4) { // 云闪付
|
||
$payObj = new CloudPayController();
|
||
$res = $payObj->cloudPaybarCodeAll($add_order,$config, $pay_type,$store_name);
|
||
if ($res['status'] == 0) {
|
||
$this->ajaxReturn($res);
|
||
}
|
||
} else if ($pay_type == 1) { // 微信
|
||
$wx_result = A("Api/PaymentCodes")->createWxPayOrder($add_order, $config, $store_name, 1);
|
||
if ($wx_result['status'] == 0) {
|
||
$this->ajaxReturn($wx_result);
|
||
}
|
||
$res['qr_code'] = $wx_result['data']['code_url'];
|
||
} else if ($pay_type == 2) { // 支付宝
|
||
$al_result = A("Api/PaymentCodes")->createAliPayOrder($add_order, $config, $store_name, 1);
|
||
if ($al_result['status'] == 0) {
|
||
$this->ajaxReturn($al_result);
|
||
}
|
||
$res['qr_code'] = $al_result['qr_code'];
|
||
} else {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '支付类型有误'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
$res['status'] = 1;
|
||
$res['out_trade_no'] = $add_order[$RPOModel::OUT_TRADE_NO];
|
||
$res['msg'] = '下单成功';
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 自助收银机查询扫码支付订单状态
|
||
* @param string $out_trade_no pay_order订单号
|
||
* @return array $res
|
||
*/
|
||
public function searchOrderPayState()
|
||
{
|
||
// 接受数据
|
||
$out_trade_no = I('post.out_trade_no');
|
||
// 判断订单号
|
||
if (!$out_trade_no) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '请求错误'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 查询订单
|
||
$RPOModel = D('RetailPayOrder');
|
||
$pay_order = $RPOModel->getFind(array($RPOModel::OUT_TRADE_NO => strval($out_trade_no)));
|
||
// 判断订单
|
||
if (empty($pay_order)) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '订单异常'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 查询bill_order
|
||
$RBOModel = D('RetailBillOrder');
|
||
$map = array(
|
||
'b.' . $RBOModel::ID => $pay_order[$RPOModel::BILL_ID],
|
||
'b.' . $RBOModel::MERCHANT_ID => self::$merchant_id,
|
||
'b.' . $RBOModel::STORE_ID => self::$store_id,
|
||
);
|
||
$bill_order = $RBOModel->getOrderLinkFind($map);
|
||
if (empty($bill_order)) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '订单查询失败'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断支付
|
||
if ($pay_order[$RPOModel::ORDER_STATE] == 'REVOKED' && $bill_order[$RBOModel::PAY_STATE] != 1) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '订单已撤销成功'
|
||
);
|
||
} else if ($pay_order[$RPOModel::ORDER_STATE] == 'SUCCESS' && $bill_order[$RBOModel::PAY_STATE] == 1) {
|
||
$res = array(
|
||
'status' => 1,
|
||
'msg' => '支付成功'
|
||
);
|
||
} else {
|
||
$res = array(
|
||
'status' => 2,
|
||
'msg' => '等待支付'
|
||
);
|
||
}
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 自助收银机订单超时 关闭订单
|
||
* @param string $out_trade_no pay_order订单号
|
||
* @return array $res
|
||
*/
|
||
public function closePayOrder()
|
||
{
|
||
// 接受数据
|
||
$out_trade_no = I('post.out_trade_no');
|
||
// 判断订单号
|
||
if (!$out_trade_no) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '请求错误'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 查询订单
|
||
$RPOModel = D('RetailPayOrder');
|
||
$pMap = array(
|
||
$RPOModel::OUT_TRADE_NO => strval($out_trade_no)
|
||
);
|
||
$pay_order = $RPOModel->getFind($pMap);
|
||
// 判断订单
|
||
if (empty($pay_order)) {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '订单异常'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 判断订单是否支付成功
|
||
if ($pay_order[$RPOModel::ORDER_STATE] == 'SUCCESS') {
|
||
$res = array(
|
||
'status' => 2,
|
||
'msg' => '订单已支付'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
} else if ($pay_order[$RPOModel::ORDER_STATE] != 'WAIT_BUYER_PAY') {
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '订单已被撤销'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
} else {
|
||
$RPSModel = D('RetailPaySet'); // 支付设置模型
|
||
$RPOModel = D('RetailPayOrder'); // pay_order模型
|
||
// 查询支付设置
|
||
$pay_config = $RPSModel->getFindMerchantConfig($pay_order[$RPOModel::MERCHANT_ID], 1);
|
||
if ($pay_config['status'] == 0) {
|
||
return $pay_config;
|
||
}
|
||
$config = $pay_config['config'];
|
||
// 判断支付方式
|
||
if ($pay_order[$RPOModel::M_PAY_TYPE] != 3) { // 普通模式 服务商模式 撤销订单 新大陆无法撤销
|
||
// 微信订单 撤销订单
|
||
if ($pay_order[$RPOModel::PAY_TYPE] == 1) { // 微信撤销订单
|
||
// 查询微信订单状态
|
||
$close_result = $this->closeWxPayOrder($pay_order, $config);
|
||
// 用户已支付
|
||
if ($close_result['status'] == 2) {
|
||
$extend_content = $this->searchWxOrder($pay_order, $config);
|
||
// 修改pay_order表订单
|
||
$up = array(
|
||
$RPOModel::TRADE_NO => $extend_content['transaction_id'],
|
||
$RPOModel::ORDER_STATE => 'SUCCESS',
|
||
$RPOModel::TRADE_DATE => time(),
|
||
$RPOModel::EXTEND_CONTENT => $extend_content
|
||
);
|
||
$save = $RPOModel->updateOrder($pMap, $up); //更新订单信息
|
||
if (!$save) {
|
||
$res = array('status' => 0, 'msg' => '用户已完成支付,订单出现异常,请联系商家');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
// 修改bill订单
|
||
$bill_result = A('PayApi/Order')->paySuccess($pay_order[$RPOModel::BILL_ID]);
|
||
if ($bill_result['status'] == 0) {
|
||
$this->ajaxReturn($bill_result);
|
||
} else {
|
||
$res = array('status' => 2, 'msg' => '订单已支付');
|
||
$this->ajaxReturn($res);
|
||
}
|
||
}
|
||
} else if ($pay_order[$RPOModel::PAY_TYPE] == 2) { // 支付宝撤销订单
|
||
A('Pay/NewAliPay')->revocation_v2($pay_order, $config);
|
||
}
|
||
}
|
||
}
|
||
// 修改pay_order订单状态
|
||
$RPOModel->updateOrder($pMap, array($RPOModel::ORDER_STATE => 'REVOKED'));
|
||
$res = array(
|
||
'status' => 1,
|
||
'msg' => '撤销成功'
|
||
);
|
||
$this->ajaxReturn($res);
|
||
}
|
||
|
||
/**
|
||
* 微信撤销订单
|
||
* @param array $order
|
||
* @return array $res
|
||
*/
|
||
protected function closeWxPayOrder($order, $config)
|
||
{
|
||
$RPSModel = D('RetailPaySet'); // 支付设置模型
|
||
$RPOModel = D('RetailPayOrder'); // pay_order模型
|
||
$out_trade_no = $order[$RPOModel::OUT_TRADE_NO];
|
||
if ($order[$RPOModel::M_PAY_TYPE] == 1) {
|
||
$post['appid'] = $config[$RPSModel::WX_APPID];
|
||
$post['mch_id'] = $config[$RPSModel::WX_MCH_ID];
|
||
$apiclient_cert = $config[$RPSModel::WX_AC_CERT];
|
||
$apiclient_key = $config[$RPSModel::WX_AC_KEY];
|
||
$key = $config[$RPSModel::WX_SECRET_KEY];
|
||
} else if ($order[$RPOModel::M_PAY_TYPE] == 2) {
|
||
$pay_set = M("systemconfig")->find(); // 查询合作伙伴配置
|
||
$post['appid'] = $pay_set['wx_appid'];
|
||
$post['mch_id'] = $pay_set['mch_id'];
|
||
$post['sub_mch_id'] = $config[$RPSModel::WX_SUB_MCH_ID];
|
||
$post['sub_appid'] = $config[$RPSModel::WX_APPID];
|
||
$apiclient_cert = $pay_set['wx_apiclient_cert'];
|
||
$apiclient_key = $pay_set['wx_apiclient_key'];
|
||
$key = $pay_set['wx_key'];
|
||
}
|
||
$item['apiclient_cert'] = $apiclient_cert;
|
||
$item['apiclient_key'] = $apiclient_key;
|
||
$item['key'] = $key;
|
||
$WxMicroPay = new \Util\Wx\WxMicroPay($item);
|
||
$post['out_trade_no'] = $out_trade_no;
|
||
$post['nonce_str'] = $WxMicroPay->createNoncestr(32);
|
||
$post['sign'] = $WxMicroPay->getSign($post);
|
||
|
||
$xml = $WxMicroPay->arrayToXml($post);
|
||
$url = 'https://api.mch.weixin.qq.com/pay/closeorder';
|
||
$response = $WxMicroPay->postXmlCurl($xml, $url, 30);
|
||
$response = json_decode(json_encode(simplexml_load_string($response, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
|
||
|
||
if ($response['return_code'] == 'SUCCESS' && $response['result_code'] == 'SUCCESS') {
|
||
$res = array('status' => 1, 'msg' => '撤销成功');
|
||
} else if ($response['result_code'] == 'FAIL' && $response['err_code'] == 'ORDERPAID') {
|
||
switch ($response['err_code']) {
|
||
case 'ORDERPAID':
|
||
$res = array(
|
||
'status' => 2,
|
||
'msg' => '用户已支付'
|
||
);
|
||
break;
|
||
case 'SYSTEMERROR':
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '系统异常'
|
||
);
|
||
break;
|
||
case 'ORDERCLOSED':
|
||
$res = array(
|
||
'status' => 1,
|
||
'msg' => '订单已关闭'
|
||
);
|
||
break;
|
||
default:
|
||
$res = array(
|
||
'status' => 0,
|
||
'msg' => '撤销失败'
|
||
);
|
||
}
|
||
}
|
||
return $res;
|
||
}
|
||
|
||
/**
|
||
* 微信查询用户订单
|
||
* @param array $order pay_order订单
|
||
* @return array $res
|
||
*/
|
||
protected function searchWxOrder($order, $config)
|
||
{
|
||
$RPOModel = D('RetailPayOrder'); // pay_order表模型
|
||
$RPSModel = D('RetailPaySet'); // 商户支付设置模型
|
||
$out_trade_no = $order[$RPOModel::OUT_TRADE_NO];
|
||
if ($order[$RPOModel::M_PAY_TYPE] == 1) {
|
||
$post['appid'] = $config[$RPSModel::WX_APPID];
|
||
$post['mch_id'] = $config[$RPSModel::WX_MCH_ID];
|
||
$key = $config[$RPSModel::WX_SECRET_KEY];
|
||
} else if ($order[$RPOModel::M_PAY_TYPE] == 2) {
|
||
$pay_set = M("systemconfig")->find(); // 查询合作伙伴配置
|
||
$post['appid'] = $pay_set['wx_appid'];
|
||
$post['mch_id'] = $pay_set['mch_id'];
|
||
$post['sub_mch_id'] = $config[$RPSModel::WX_SUB_MCH_ID];
|
||
$post['sub_appid'] = $config[$RPSModel::WX_APPID];
|
||
$key = $pay_set['wx_key'];
|
||
}
|
||
$item['key'] = $key;
|
||
$WxMicroPay = new \Util\Wx\WxMicroPay($item);
|
||
$post['out_trade_no'] = $out_trade_no;
|
||
$post['nonce_str'] = $WxMicroPay->createNoncestr(32);
|
||
$post['sign'] = $WxMicroPay->getSign($post);
|
||
|
||
$xml = $WxMicroPay->arrayToXml($post);
|
||
$url = 'https://api.mch.weixin.qq.com/pay/orderquery';
|
||
$response = $WxMicroPay->postXmlCurl($xml, $url, 30);
|
||
$response = json_decode(json_encode(simplexml_load_string($response, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
|
||
return $response;
|
||
}
|
||
} |