文件
mashangyoujiu/Application/Pay/Controller/PayContinentController.class.php

674 行
32 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
namespace Pay\Controller;
use Common\Model\RetailPayOrderModel;
use Think\Controller;
//[1.8.53]
/**
* 星POS接口文档信息
* @author Administrator
*/
class PayContinentController extends BaseController
{
// 网关 测试环境 adpweb/ehpspos3
// static private $gatewayUrl = "http://sandbox.starpos.com.cn/adpweb/ehpspos3";
static private $OrgNo;
static private $Key;
static private $trmNo;
static private $mercId;
// 网关 正式环境
static private $gatewayUrl = "http://gateway.starpos.com.cn/adpweb/ehpspos3";
public function _initialize()
{
//判断当前调用类的身份
$cache = M('continent_config')->find();
self::$OrgNo = $cache['continent_number'];
self::$Key = ''; // 商户秘钥
self::$trmNo = '';
self::$mercId = '';
}
/**
* 调用该方法 给机构号和商户秘钥赋值
*/
public function orN($merchant_id)
{
$merchants = M('merchant_infos')->where(array('merchant_id' => $merchant_id))->find();
if (!empty($merchants)) {
self::$Key = $merchants['key']; // 商户秘钥
self::$trmNo = $merchants['trm_no'];
self::$mercId = $merchants['merc_id'];
}
}
/** 商户支付
* @param $param
* @return array
*/
public function execute($tradeNo, $merchantid, $opens = '2')
{
$this->orN($merchantid);
$arrData['opSys'] = 0; //操作系统
$arrData['characterSet'] = '00';
$arrData['orgNo'] = self::$OrgNo;
$arrData['mercId'] = self::$mercId; //商户号 $param['mercId']
$arrData['version'] = $opens == 1 ? 'V1.0.2' : 'V1.0.1'; //版本号
$arrData['trmNo'] = self::$trmNo; //设备号 $param['trmNo']
$arrData['tradeNo'] = $tradeNo; //商户端订单号 $param['tradeNO']
$arrData['txnTime'] = date('YmdHis'); //设备端交易时间 时间戳格式$ param['txnTime']
$arrData['signType'] = 'MD5'; //签名方式
return $arrData;
}
//authCode=134765203426838443&payChannel=‘WXPAY’&subject=测试支付&amount=0.01&total_amount=0.01
//微信公众号查询
public function pubSigQrys($merchantid)
{
$this->orN($merchantid);
// http://gateway.starpos.com.cn/adpweb/ehpspos3/pubSigQry.json
$url = self::$gatewayUrl . "/pubSigQry.json";
$arrData['orgNo'] = self::$OrgNo; //机构号 self::$OrgNo
$arrData['mercId'] = self::$mercId; //商户号 self::$mercId
$arrData['trmNo'] = self::$trmNo; //设备号 self::$trmNo
$arrData['txnTime'] = date('YmdHis'); //设备端交易时间
$arrData['signType'] = 'MD5'; //签名方式
$arrData['version'] = 'V1.0.0'; //版本号
$arrData['signValue'] = $this->getSign($arrData);
$itemJson = json_encode($arrData);
$request = $this->http_request($url, $itemJson);
$request = urldecode($request);
$request = json_decode($request, true);
if ($request['returnCode'] == "000000") {
return true;
} else {
$this->errCode = $request['returnCode'];
return false;
}
}
//订单查询
public function QryBarcode($qryNo, $merchant_id, $time)
{
$url = self::$gatewayUrl . "/sdkQryBarcodePay.json";
$Qryarr = $this->execute($qryNo, $merchant_id);
$Qryarr['qryNo'] = $qryNo;
$Qryarr['txnTime'] = date('Ymd', $time);
$Qryarr['signValue'] = $this->getSign($Qryarr);
$Qryarr['qryDt'] = date('Ymd', $time);
$itemJson = json_encode($Qryarr);
$re = $this->http_request($url, $itemJson);
$request = urldecode($re);
$request = json_decode($request, true);
return $request;
}
/** 接口数字签名方法
* @param $data
* @return mixed
*/
private function getSign($data)
{
$key = self::$Key;
$arr = array_change_key_case($data, CASE_LOWER);
ksort($arr);
$str = "";
foreach ($arr as $val) {
$str .= $val;
}
$str .= $key;
return MD5($str);
}
/**
* @param $url 接口请求方法
* @param null $postFields
* @return mixed
*/
public function http_request($url, $data)
{
$ch = curl_init(); //用curl发送数据给api
$header = array(
'content-type:application/json;charset=GBK'
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$response = curl_exec($ch);
if ($response === FALSE) {
echo "CURL Error:" . curl_error($ch);
}
curl_close($ch);
return $response;
}
/**
* 新大陆回调
*/
public function notify()
{
$json_data = file_get_contents("php://input");
file_put_contents('./1.txt', date('Y-m-d H:i:s') . ': post1:' . $json_data . "\r\n", FILE_APPEND);
$config = M('continent_config')->find();
if ($config) {
$key = $config['continent_callback_secret_key'];
$privateKey = file_get_contents($config['continent_credential']);
$postData = json_decode($json_data, true);
if (strtoupper(md5($postData['Datas'] . $key)) == $postData['signValue']) {
$encode_data_arr = str_split($postData['Datas'], 256);
$decode_data_all = '';
foreach ($encode_data_arr as $value) {
openssl_private_decrypt(hex2bin($value), $decode_data, $privateKey);
$decode_data_all .= $decode_data;
}
$endData = json_decode($decode_data_all, true);
$data = var_export($endData, TRUE);
file_put_contents('./1.txt', 'post2:' . $data . "\r\n", FILE_APPEND);
if ($endData['TxnStatus'] == 1 && ($endData['PayChannel'] == 2 || $endData['PayChannel'] == 1) && ($endData['TxnCode'] == 'N007' || $endData['TxnCode'] == 'N002')) {
$PayOrderModel = D('RetailPayOrder');
if ($endData['TxnCode'] == 'N007') {
$Order = $PayOrderModel->getFind(array('out_trade_no' => strval($endData['ChannelId'])));
} else {
$Order = $PayOrderModel->getFind(array('out_trade_no' => strval($endData['TxnLogId'])));
}
file_put_contents('./1.txt', 'Order:' . json_encode($Order) . "\r\n", FILE_APPEND);
if (!empty($Order)) {
if ($Order['order_state'] == 'WAIT_BUYER_PAY') {
/*
* 1.新版回调,须在pay_order表存入回调地址
* 2.在调用该函数时请务必判断下列常量IsPayToUpdateOrder是否为YES
* 3.再进行更新订单操作
* */
if (!empty($Order[$PayOrderModel::NOTIFY_URL])) {
define('IsPayToUpdateOrder', 'YES');//存入常量
$updateData = array(
$PayOrderModel::ORDER_STATE => 'SUCCESS',
$PayOrderModel::EXTEND_CONTENT => json_encode($endData),
$PayOrderModel::TRADE_DATE => time(),
$PayOrderModel::TRADE_NO => $endData['OfficeId']
);
file_put_contents('./122.txt', 'Order22:' . json_encode($Order) . "\r\n", FILE_APPEND);
$PayOrderModel->updateOrder(array($PayOrderModel::ID => $Order[$PayOrderModel::ID]), $updateData); //更新pay_order表
$this->doAddRate($endData['OfficeId'], $Order, 3); //增加代理商合伙人分润记录
R($Order[$PayOrderModel::NOTIFY_URL], array($Order));//执行回调函数
} else {
if ($Order['order_type'] == 1) {
//买单
if ($endData['TxnCode'] == 'N007') {
$bill = D('Bill')->getFind(array('out_trade_no' => strval($endData['ChannelId']), 'pay_orderid' => $Order['id']));
} else {
$bill = D('Bill')->getFind(array('out_trade_no' => strval($endData['TxnLogId']), 'pay_orderid' => $Order['id']));
}
if (!empty($bill)) {
$updateData = array(
$PayOrderModel::ORDER_STATE => 'SUCCESS',
$PayOrderModel::EXTEND_CONTENT => json_encode($endData),
$PayOrderModel::TRADE_DATE => time(),
$PayOrderModel::TRADE_NO => $endData['OfficeId'],
$PayOrderModel::PAY_TYPE => 4
);
$PayOrderModel->updateOrder(array($PayOrderModel::ID => $Order[$PayOrderModel::ID]), $updateData); //更新pay_order表
A('Xcxapi/WxPay')->updateOrder_v1($bill);
$this->doAddRate($endData['OfficeId'], $Order, 3);
}
} else if ($Order['order_type'] == 2) {
//充值
$updateData = array(
$PayOrderModel::ORDER_STATE => 'SUCCESS',
$PayOrderModel::EXTEND_CONTENT => json_encode($endData),
$PayOrderModel::TRADE_DATE => time(),
$PayOrderModel::TRADE_NO => $endData['OfficeId']
);
$PayOrderModel->updateOrder(array($PayOrderModel::ID => $Order[$PayOrderModel::ID]), $updateData); //更新pay_order表
A('VipPay')->rechargeSuccess($Order, $updateData);
$this->doAddRate($endData['OfficeId'], $Order, 3);
} else if ($Order['order_type'] == 4) {
//礼品卡
$gift_order = M('gift_card_record')->where(array('pay_order_id' => $Order['id'], 'xcx_vid' => $Order['uid']))->find();
if (!empty($gift_order)) {
$update = M('gift_card_record')->where(array('id' => $gift_order['id']))->save(array('state' => 1));
$update1 = M('gift_card_price')->where(array('id' => $gift_order['gift_price_id']))->setDec('less_num', 1);
if ($update) {
$update['order_state'] = "SUCCESS";
$update['extend_content'] = json_encode($endData);
$update['trade_date'] = time();
$update['pay_type'] = 4;
$update['trade_no'] = $endData['OfficeId'];
M('retail_pay_order')->where(array('id' => $Order['id']))->save($update);
}
$this->doAddRate($endData['OfficeId'], $Order, 3);
}
} else if ($Order['order_type'] == 5) {
//开通续费plus会员
$up['order_state'] = "SUCCESS";
$up['extend_content'] = json_encode($endData);
$up['trade_date'] = time();
$up['pay_type'] = 4;
$up['trade_no'] = $endData['OfficeId'];
A('Xcxapi/PlusVip')->updateOrder($Order, $up);
$this->doAddRate($endData['OfficeId'], $Order, 3);
} else if ($Order['order_type'] == 6) {
//小助手快捷收单
$updateData = array(
$PayOrderModel::ORDER_STATE => 'SUCCESS',
$PayOrderModel::EXTEND_CONTENT => json_encode($endData),
$PayOrderModel::TRADE_DATE => time(),
$PayOrderModel::TRADE_NO => $endData['OfficeId']
);
file_put_contents('./122.txt', 'Order22:' . json_encode($Order) . "\r\n", FILE_APPEND);
$PayOrderModel->updateOrder(array($PayOrderModel::ID => $Order[$PayOrderModel::ID]), $updateData); //更新pay_order表
$this->doAddRate($endData['OfficeId'], $Order, 3); //增加代理商合伙人分润记录
}
}
}
return 'success';
} else {
//多域名回调
$continentNotify = file_get_contents('./Public/continent/notifyUrl.json');
if (!empty($continentNotify)) {
try {
$notifyList = json_decode($continentNotify, true);
if (is_array($notifyList)) {
foreach ($notifyList as $value) {
if (!empty($value['url'])) {
file_put_contents('./1.txt', date('Y-m-d H:i:s') . ' url: ' . $value['url'] . "\r\n", FILE_APPEND);
$res = $this->http_request($value['url'], $json_data);
file_put_contents('./1.txt', date('Y-m-d H:i:s') . ' res: ' . json_encode($res) . "\r\n", FILE_APPEND);
if ($res) {
return 'success';
}
}
}
}
} catch (Exception $e) {
return false;
}
}
return false;
}
}
}
}
}
/*-------------------------2019-5-18 组合支付结束---------------------------------*/
/*-------------------------2019-7-8 新版支付开始---------------------------------*/
/**
* 新大陆刷卡支付
* @param $pay_order
* @param $subject
* @return mixed
*/
public function toContinentPay_v3($pay_order, $subject)
{
$url = self::$gatewayUrl . "/sdkBarcodePay.json";
$PayOrderModel = D('RetailPayOrder');
$itemData = $this->execute($pay_order[$PayOrderModel::OUT_TRADE_NO], $pay_order[$PayOrderModel::MERCHANT_ID], 1);
$itemData['authCode'] = $pay_order[$PayOrderModel::CODE]; //设备读取用户微信或支付宝中的条码或者二维码信息
$itemData['payChannel'] = $pay_order[$PayOrderModel::PAY_TYPE] == 2 ? 'ALIPAY' : 'WXPAY'; //支付宝---ALIPAY 微信---WXPAY 银联---YLPAY
$itemData['subject'] = $subject; //订单标题
$itemData['amount'] = $pay_order[$PayOrderModel::TRADE_AMOUNT] * 100; //实付金额 以分为单位
$itemData['total_amount'] = $itemData['amount']; //订单总金额
//拼接之后签名
$itemData['signValue'] = $this->getSign($itemData);
$itemJson = json_encode($itemData);
$re = $this->http_request($url, $itemJson);
$request = urldecode($re);
file_put_contents('./xdlLinePay.txt', date('Y-m-d H:i:s') . json_encode($request), FILE_APPEND);
$request = json_decode($request, true);
if ($request['returnCode'] == "000000") {
if ($request['result'] == "A") {
$result = $this->searchAndUpdateOrder_v3($pay_order);
} else if ($request['result'] == "S") {
//支付成功
$save[$PayOrderModel::TRADE_NO] = $request['orderNo'];
$save[$PayOrderModel::ORDER_STATE] = 'SUCCESS';
$save[$PayOrderModel::TRADE_DATE] = time();
$save[$PayOrderModel::EXTEND_CONTENT] = json_encode($request);
$up = $PayOrderModel->updateOrder(array($PayOrderModel::ID => $pay_order[$PayOrderModel::ID]), $save);
$this->doAddRate($request['orderNo'], $pay_order, 3);//分润
if ($up) {
$result['status'] = 1;
$result['msg'] = '支付成功';
} else {
$result['status'] = 0;
$result['msg'] = '支付成功但订单更新失败1,请联系管理员';
}
}
} else {
$result['request'] = $request;
$result['post'] = $itemData;
$result['status'] = 0;
$result['msg'] = $request['message'] ? $request['message'] : '支付失败';
}
return $result;
}
/**
* 用户等待支付
* @param $pay_order
* @return mixed
*/
public function searchAndUpdateOrder_v3($pay_order)
{
$canReturn = false;
$PayOrderModel = D('RetailPayOrder');
while (!$canReturn) {
$res = $this->QryBarcode($pay_order['out_trade_no'], $pay_order['merchant_id'], $pay_order['add_time']);
file_put_contents('./xdlLinePay.txt', date('Y-m-d H:i:s') . json_encode($res), FILE_APPEND);
if ($res['returnCode'] == '000000') {
if ($res['result'] == 'A') {
$time = get_runtime();
if ($time >= 60) {
//超时,撤销订单
$result['status'] = 0;
$result['msg'] = '用户取消支付';
$canReturn = true;
}
} else if ($res['result'] == 'S') {
//支付成功
$save[$PayOrderModel::TRADE_NO] = $res['orderNo'];
$save[$PayOrderModel::ORDER_STATE] = 'SUCCESS';
$save[$PayOrderModel::TRADE_DATE] = time();
$save[$PayOrderModel::EXTEND_CONTENT] = json_encode($res);
$up = $PayOrderModel->updateOrder(array($PayOrderModel::ID => $pay_order[$PayOrderModel::ID]), $save);
$this->doAddRate($res['orderNo'], $pay_order, 3);
if ($up) {
$result['status'] = 1;
$result['msg'] = '支付成功';
} else {
$result['status'] = 0;
$result['msg'] = '支付成功但订单更新失败2,请联系管理员';
}
$canReturn = true;
} else {
$result['status'] = 0;
$result['msg'] = '用户取消支付2';
$canReturn = true;
}
} else {
$result['status'] = 0;
$result['res'] = $res;
$result['msg'] = '用户取消支付3';
$canReturn = true;
}
}
return $result;
}
/**
* 2019-7-9 小程序下单接口
* @param $total_fee
* @param $openid
* @param $merchant_id
* @param $out_trade_no
* @return mixed
*/
public function pubSigPay_v3($total_fee, $openid, $merchant_id, $out_trade_no)
{
$res = $this->pubSigQrys($merchant_id);
if ($res) {
$appId = M('merchant_infos')->where(array('merchant_id' => $merchant_id))->getField('xcc_appid');
$url = self::$gatewayUrl . "/pubSigPay.json";
$this->orN($merchant_id);
$param['orgNo'] = self::$OrgNo; //机构号
$param['mercId'] = self::$mercId; //商户号
$param['trmNo'] = self::$trmNo; //终端号
$param['txnTime'] = date('YmdHis'); //设备端交易时间
$param['version'] = 'V1.0.0';
$param['amount'] = $total_fee;
$param['total_amount'] = $total_fee;
$param['openid'] = $openid;
$param['txnappid'] = $appId;
$param['selOrderNo'] = $out_trade_no;//商户内部订单号
//拼接之后签名
$itemJson = json_encode($param);
$re = $this->http_request($url, $itemJson);
$request = urldecode($re);
$request = json_decode($request, true);
if ($request['returnCode'] == '000000') {
$data['timeStamp'] = $request['apiTimestamp'];
$data['nonceStr'] = $request['apiNoncestr'];
$data['package'] = $request['apiPackage'];
$data['signType'] = $request['apiSigntype'];
$data['paySign'] = $request['apiPaysign'];
$data['PrepayId'] = $request['PrepayId'];
$result['status'] = 1;
$result['msg'] = '创建订单成功';
$result['data'] = $data;
} else {
$result['status'] = 0;
$result['msg'] = $request['message'] ? $request['message'] : '创建订单失败';
}
} else {
$result['status'] = 0;
$result['msg'] = '新大陆支付初始化失败';
}
return $result;
}
/**
* 退款
* @param $payOrder
* @return mixed
*/
public function toOrderRefund_v3($payOrder)
{
$url = self::$gatewayUrl . "/sdkRefundBarcodePay.json";
$PayOrderModel = D('RetailPayOrder');
$txnArr = $this->execute($payOrder[$PayOrderModel::TRADE_NO], $payOrder[$PayOrderModel::MERCHANT_ID]);
$txnArr['orderNo'] = $payOrder[$PayOrderModel::TRADE_NO]; //支付渠道订单号
$txnArr['tradeNo'] = $payOrder[$PayOrderModel::OUT_TRADE_NO];
$txnArr['txnAmt'] = $payOrder[$PayOrderModel::TRADE_AMOUNT] * 100; //退款金额
$txnArr['signValue'] = $this->getSign($txnArr);
$itemJson = json_encode($txnArr);
$re = $this->http_request($url, $itemJson);
$request = urldecode($re);
$request = json_decode($request, true);
// file_put_contents('1.txt', json_encode($request) . "\r\n", FILE_APPEND);
$result['data'] = $request;
if ($request['returnCode'] == "000000") {
$where['out_trade_no'] = $payOrder['before_trade_no'];
$where['state'] = 0;
$info = M('continent_cash')->where($where)->find();
if (!empty($info)) {
$refundMoney = $payOrder[$PayOrderModel::TRADE_AMOUNT];
if ((floatval($refundMoney) < round($info['trade_amount'] + $info['refund_amount'], 2))) {
$partner_refund_profit = round(($info['agent_rate'] - $info['partner_rate']) / 100 * $refundMoney, 2);
$agent_refund_profit = round(($info['merchant_rate'] - $info['agent_rate']) / 100 * $refundMoney, 2);
} else {
$partner_refund_profit = $info['partner_profit'];
$agent_refund_profit = $info['agent_profit'];
}
$save['partner_refund_profit'] = round($info['partner_refund_profit'] + $partner_refund_profit, 2);
$save['agent_refund_profit'] = round($info['agent_refund_profit'] + $agent_refund_profit, 2);
if ($save['partner_refund_profit'] > $info['partner_profit']) {
$partner_refund_profit = round($info['partner_profit'] - $info['partner_refund_profit'], 2);
$save['partner_refund_profit'] = $info['partner_profit'];
}
if ($agent_refund_profit > $info['agent_profit']) {
$agent_refund_profit = round($info['agent_profit'] - $info['agent_refund_profit'], 2);
$save['agent_refund_profit'] = $info['agent_profit'];
}
$save['refund_amount'] = round($refundMoney + $info['refund_amount'], 2);
M('retail_admin')->where(array('id' => $info['partner_id']))->setDec('balance', $agent_refund_profit);
M('retail_agent')->where(array('id' => $info['agent_id']))->setDec('balance', $partner_refund_profit);
M('continent_cash')->where($where)->save($save);
}
$result['status'] = 1;
$result['msg'] = '退款成功';
} else {
$result['status'] = 0;
$result['msg'] = '退款失败';
}
return $result;
}
/**
* 新大陆扫码支付获取二维码
* @param array $order pay_order订单
* @return array $res
*/
public function sweepCodePay($order)
{
$RPOModel = D('RetailPayOrder'); // pay_order表模型
$money = $order[$RPOModel::TRADE_AMOUNT] * 100;
$url = self::$gatewayUrl . "/sdkBarcodePosPay.json";
$mer_id = M("merchant_infos")->where(array('merchant_id' => $order['merchant_id']))->getField("merc_id");
$RPOModel->updateOrder(array($RPOModel::OUT_TRADE_NO => $order[$RPOModel::OUT_TRADE_NO]), array($RPOModel::MER_ID => $mer_id));
$arrData = $this->execute($order[$RPOModel::OUT_TRADE_NO], $order[$RPOModel::MERCHANT_ID]);
$arrData['amount'] = $money; // $param['money']*100
$arrData['total_amount'] = $money; // $param['total_amount']
$arrData['payChannel'] = $order[$RPOModel::PAY_TYPE] == 2 ? 'ALIPAY' : 'WXPAY'; //$param['types']
$arrData['signValue'] = $this->getSign($arrData);
$itemJson = json_encode($arrData);
$re = $this->http_request($url, $itemJson);
$request = urldecode($re);
$request = json_decode($request, true);
if ($request['returnCode'] == '000000') {
if ($request['result'] == 'S') {
$data['code_url'] = $request['payCode'];
$res['qr_code'] = $request['payCode'];
$res['data'] = $data;
$res['status'] = 1;
} else {
$res['status'] = 0;
$res['msg'] = $request['message'];
}
} else {
$res['status'] = 0;
$res['msg'] = $request['message'];
}
return $res;
}
/*-------------------------2019-7-8 新版支付结束---------------------------------*/
/**
* 2019-11-15 小程序或公众号下单接口
* @param $payOrder
* @param $openid
* @param $type 1公众号 2小程序
* @return mixed
*/
public function createOnlineOrder($payOrder, $openid, $type)
{
$PayOrderModel = D('RetailPayOrder');
$merchant_id = $payOrder[$PayOrderModel::MERCHANT_ID];
$total_fee = $payOrder[$PayOrderModel::TRADE_AMOUNT] * 100;
$out_trade_no = $payOrder[$PayOrderModel::OUT_TRADE_NO];
$res = $this->pubSigQrys($merchant_id);
if ($res) {
$iMap = array(
'merchant_id' => $merchant_id,
);
$infos = M('merchant_infos')->where($iMap)->field('xcc_appid,merc_id,wx_appid')->find();
$appId = $type == 1 ? $infos['wx_appid'] : $infos['xcc_appid'];
$pMap = array(
$PayOrderModel::ID => $payOrder[$PayOrderModel::ID],
);
$pSave = array(
$PayOrderModel::MER_ID => $infos['merc_id'],
$PayOrderModel::M_PAY_TYPE => 3,
);
$PayOrderModel->updateOrder($pMap, $pSave);//更新支付收款商户号
$url = self::$gatewayUrl . "/pubSigPay.json";
$this->orN($merchant_id);
$param['orgNo'] = self::$OrgNo; //机构号
$param['mercId'] = self::$mercId; //商户号
$param['trmNo'] = self::$trmNo; //终端号
$param['txnTime'] = date('YmdHis'); //设备端交易时间
$param['version'] = 'V1.0.0';
$param['amount'] = $total_fee;
$param['total_amount'] = $total_fee;
$param['openid'] = $openid;
$param['txnappid'] = $appId;
$param['selOrderNo'] = $out_trade_no;//商户内部订单号
//拼接之后签名
$itemJson = json_encode($param);
$re = $this->http_request($url, $itemJson);
$request = urldecode($re);
$request = json_decode($request, true);
if ($request['returnCode'] == '000000') {
$data['timeStamp'] = $request['apiTimestamp'];
$data['nonceStr'] = $request['apiNoncestr'];
$data['package'] = $request['apiPackage'];
$data['signType'] = $request['apiSigntype'];
$data['paySign'] = $request['apiPaysign'];
$data['PrepayId'] = $request['PrepayId'];
$data['signType'] = $request['apiSigntype'];
$result['status'] = 1;
$result['msg'] = '创建订单成功';
$result['data'] = $data;
} else {
$result['status'] = 0;
$result['msg'] = $request['message'] ? $request['message'] : '创建订单失败';
}
} else {
$result['status'] = 0;
$result['msg'] = '新大陆支付初始化失败';
}
return $result;
}
/**
* 新大陆刷卡支付 2020-10-15
* @param $pay_order
* @param $subject
* @return mixed
*/
public function toContinentPay_v4($pay_order, $subject)
{
$url = self::$gatewayUrl . "/sdkBarcodePay.json";
$this->orN($pay_order['merchant_id']);
$itemData = [
'opSys' => 0, //操作系统
'characterSet' => '00',
'orgNo' => self::$OrgNo,
'mercId' => self::$mercId, //商户号 $param['mercId']
'version' => 'V1.0.6', //版本号
'trmNo' => self::$trmNo, //设备号 $param['trmNo']
'tradeNo' => $pay_order['out_trade_no'], //商户端订单号 $param['tradeNO']
'txnTime' => date('YmdHis'), //设备端交易时间 时间戳格式$ param['txnTime']
'signType' => 'MD5', //签名方式
'authCode' => $pay_order['code'], //设备读取用户微信或支付宝中的条码或者二维码信息
'payChannel' => $pay_order['pay_type'] == 2 ? 'ALIPAY' : 'WXPAY', //支付宝---ALIPAY 微信---WXPAY 银联---YLPAY
'subject' => $subject, //订单标题
'amount' => $pay_order['trade_amount'] * 100, //实付金额 以分为单位
'total_amount' => $pay_order['trade_amount'] * 100, //订单总金额
'orderTimOut' => '1',//订单超时时间(单位:分)仅V1.0.6往上的版本支持
];
//拼接之后签名
$itemData['signValue'] = $this->getSign($itemData);
$itemJson = json_encode($itemData);
$request = $this->http_request($url, $itemJson);
$request = urldecode($request);
file_put_contents('./xdlLinePay.txt', date('Y-m-d H:i:s') . json_encode($request), FILE_APPEND);
$request = json_decode($request, true);
if ($request['returnCode'] == "000000") {
return callBack(statusCode()['success'],"请求成功");
} else {
$result['request'] = $request;
$result['post'] = $itemData;
$result['status'] = 0;
$result['message'] = $request['message'] ? $request['message'] : '支付失败';
return $result;
}
}
}