文件
mashangyoujiu/Application/Api/Controller/PaymentCodesController.class.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;
}
}