159 行
7.1 KiB
PHP
可执行文件
159 行
7.1 KiB
PHP
可执行文件
<?php
|
|
|
|
namespace Api\Controller;
|
|
|
|
use Think\Controller;
|
|
//[1.3.20]
|
|
/*
|
|
* 生成支付二维码
|
|
*
|
|
*/
|
|
|
|
class PaymentCodesController extends Controller
|
|
{
|
|
static $REQUEST_URL; //当前地址
|
|
public function _initialize()
|
|
{
|
|
$title = 'http';
|
|
if ($_SERVER['HTTPS'] == 'on') {
|
|
$title .= 's';
|
|
}
|
|
$this->REQUEST_URL = $title . '://' . $_SERVER['HTTP_HOST'];
|
|
}
|
|
/**
|
|
* 微信扫码支付获取二维码
|
|
* @param array $order pay_order订单
|
|
* @param array $config 商户支付配置
|
|
* @param $store_name 门店名称
|
|
* @param $type 1自助收银机 2快捷收银
|
|
* @return array $res
|
|
*/
|
|
public function createWxPayOrder($order,$config,$store_name,$type)
|
|
{
|
|
$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];
|
|
$mer_id = $post['mch_id'];
|
|
} 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];
|
|
if(!empty($config[$RPSModel::WX_SUB_APPID])){
|
|
$post['sub_appid'] = $config[$RPSModel::WX_SUB_APPID];
|
|
}
|
|
$key = $pay_set['wx_key'];
|
|
$mer_id = $post['sub_mch_id'];
|
|
}
|
|
$RPOModel->updateOrder(array($RPOModel::OUT_TRADE_NO=>$order[$RPOModel::OUT_TRADE_NO]),array($RPOModel::MER_ID=>$mer_id));
|
|
$WxMicroPay = new \Util\Wx\WxMicroPay(array('key' => $key));
|
|
if($type == 1){
|
|
$post['body'] = $store_name . '-自助收银机购买商品';
|
|
}else{
|
|
$post['body'] = $store_name . '-快捷收单';
|
|
}
|
|
$post['out_trade_no'] = $out_trade_no;
|
|
$post['total_fee'] = $order[$RPOModel::TRADE_AMOUNT] * 100;
|
|
$post['nonce_str'] = $WxMicroPay->createNoncestr(32);
|
|
if($type == 1){
|
|
$post['notify_url'] = $this->REQUEST_URL . "/index.php/NotifyApi/SelfHelpCashier/wxPayNotifyUrl"; // 自助收银回调地址
|
|
}else{
|
|
$post['notify_url'] = $this->REQUEST_URL . "/index.php/NotifyApi/SelfHelpCashier/wxPayQuickNotifyUrl"; //快捷收单回调地址
|
|
}
|
|
$post['trade_type'] = 'NATIVE'; //微信支付类型
|
|
$post['time_expire'] = date('YmdHis', time() + 60);
|
|
$post['sign'] = $WxMicroPay->getSign($post);
|
|
|
|
$xml = $WxMicroPay->arrayToXml($post);
|
|
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
|
|
$response = $WxMicroPay->postXmlCurl($xml, $url, 30);
|
|
$response = json_decode(json_encode(simplexml_load_string($response, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
|
|
|
|
if (!empty($response) && $response['return_code'] != 'FAIL') {
|
|
$res = array(
|
|
'status' => 1,
|
|
'msg' => '微信下单成功',
|
|
'data' => $response
|
|
);
|
|
} else {
|
|
$res = array(
|
|
'status' => 0,
|
|
'msg' => $response['return_msg']
|
|
);
|
|
}
|
|
return $res;
|
|
}
|
|
/**
|
|
* 支付宝扫码支付获取二维码
|
|
* @param array $order pay_order 订单
|
|
* @param array $config 商户支付配置
|
|
* @param $store_name 门店名称
|
|
* @param $type 1自助收银机 2快捷收银
|
|
* @return array $res
|
|
* @throws \Exception
|
|
*/
|
|
public function createAliPayOrder($order,$config,$store_name,$type)
|
|
{
|
|
$RPOModel = D('RetailPayOrder'); // pay_order表模型
|
|
$RSModel = D('RetailStore'); // 门店表模型
|
|
$item['out_trade_no'] = $order[$RPOModel::OUT_TRADE_NO];
|
|
$item['total_amount'] = $order[$RPOModel::TRADE_AMOUNT];
|
|
if($type == 1){
|
|
$item['subject'] = $store_name . '-自助收银机购买商品';
|
|
}else{
|
|
$item['subject'] = $store_name . '-快捷收单';
|
|
}
|
|
$item['timeout_express'] = '1m'; // 60秒超时关闭订单
|
|
if ($order[$RPOModel::M_PAY_TYPE] == 1) { // 普通模式
|
|
$appId = $config['alipay_appid'];
|
|
$rsaPrivateKey = $config['alipay_private_key'];
|
|
$alipayrsaPublicKey = $config['alipay_public_key'];
|
|
$mer_id = $appId;
|
|
} else if ($order[$RPOModel::M_PAY_TYPE] == 2) { // 服务商模式
|
|
$pay_set = M("systemconfig")->find(); // 查询合作伙伴配置
|
|
$appId = $pay_set['alipay_appid'];
|
|
$rsaPrivateKey = $pay_set['alipay_private_key'];
|
|
$alipayrsaPublicKey = $pay_set['alipay_public_key'];
|
|
$mer_id = $config['alipay_sellerid'];
|
|
}
|
|
$RPOModel->updateOrder(array($RPOModel::OUT_TRADE_NO=>$order[$RPOModel::OUT_TRADE_NO]),array($RPOModel::MER_ID=>$mer_id));
|
|
vendor('AopSDK.AopClient');
|
|
$aop = new \AopClient();
|
|
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
|
|
$aop->appId = $appId;
|
|
$aop->rsaPrivateKey = $rsaPrivateKey;
|
|
$aop->alipayrsaPublicKey = $alipayrsaPublicKey;
|
|
$aop->apiVersion = '1.0';
|
|
$aop->signType = 'RSA2';
|
|
$aop->postCharset = 'utf-8';
|
|
$aop->format = 'json';
|
|
vendor('AopSDK.request.AlipayTradePrecreateRequest');
|
|
$request = new \AlipayTradePrecreateRequest();
|
|
if($type == 1){
|
|
$request->setNotifyUrl($this->REQUEST_URL . '/index.php/NotifyApi/SelfHelpCashier/aliPayNotifyUrl'); // 自助收银回调
|
|
}else{
|
|
$request->setNotifyUrl($this->REQUEST_URL . '/index.php/NotifyApi/SelfHelpCashier/aliPayQuickNotifyUrl'); //快捷收单回调
|
|
}
|
|
$request->setBizContent(json_encode($item));
|
|
if ($order[$RPOModel::M_PAY_TYPE] == 1) {
|
|
$result = $aop->execute($request);
|
|
} else {
|
|
$result = $aop->execute($request, "", $config["alipay_token"]);
|
|
}
|
|
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
|
|
$resultCode = $result->$responseNode->code;
|
|
if (!empty($resultCode) && $resultCode == 10000) { //交易成功
|
|
$result = json_decode(json_encode($result), true)['alipay_trade_precreate_response'];
|
|
$result['status'] = 1;
|
|
} else { //交易失败
|
|
$result['status'] = 0;
|
|
$result['msg'] = json_decode(($result), true)['alipay_trade_precreate_response']['sub_msg'];
|
|
$result['error_msg'] = json_encode($result);
|
|
}
|
|
return $result;
|
|
}
|
|
} |