getFind(array('id' => $storeid))['storetag'];
$item ['total_amount'] = $money;
$item ['scene'] = 'bar_code';
$alicodepay = $this->alCodePay($item, $storeid, $merchantid, $out_trade_no, $adminid, $orderInfo, $orderid);
if ($alicodepay['status'] == 1) {
//收款成功
$save['trade_no'] = $alicodepay['trade_no'];
$save['order_state'] = 'SUCCESS';
$save['tradedate'] = time();
$save['extend_content'] = json_encode($alicodepay);
$PayOrderModel = D('PayOrder');
$update = $PayOrderModel->updateOrder(array('id' => $orderid), $save);
if ($update) {
A("Sellapi/PayRefund")->payOvers(4, $adminid, $storeid, $merchantid, $orderInfo, $orderid);
$data['status'] = 1;
$data['msg'] = '收款成功';
$data['out_trade_no'] = $out_trade_no;
$data['mdate'] = $save ['tradedate'];
$data['pay_type'] = "支付宝";
} else {
$data['status'] = 0;
$data['msg'] = '收款成功,订单更新失败,请联系服务商';
}
} else {
//收款失败
$data['status'] = 0;
$data['msg'] = $alicodepay['msg'];
}
$this->ajaxReturn($data);
}
public function alCodePay($item, $storeid, $merchantid, $out_trade_no, $adminid, $orderInfo, $orderid)
{
$config = D('Payset')->getFindConfig($storeid);//获取商户微信配置信息
if (empty($config)) {
$data['status'] = 0;
$data['msg'] = '商家支付参数未配置';
$this->ajaxReturn($data);
}
vendor('AopSDK.AopClient');
if ($config["status"] == 1) {
$aop = new \AopClient();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $config['alipay_appid'];
$aop->rsaPrivateKey = $config['alipay_private_key'];
$aop->alipayrsaPublicKey = $config['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
} else if ($config["status"] == 3) {
$id = $config["merchantid"];
$partnerid = M("retail_merchant")->where(array('id' => $id))->getField("partnerid");
$AliPay = M("systemconfig")->where(array("partnerid" => $partnerid))->find();
if(!empty($AliPay['alipay_pid'])){
$item ['extend_params'] = array('sys_service_provider_id' => $AliPay['alipay_pid']);
}
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $AliPay['alipay_appid'];
$aop->rsaPrivateKey = $AliPay['alipay_private_key'];
$aop->alipayrsaPublicKey = $AliPay['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
} else if ($config["status"] == 4) {
//新大陆支付
$pays['tradeNo'] = $out_trade_no;
$pays['authCode'] = $item['auth_code'];
$pays['types'] = 1;
$pays['subject'] = $item['subject'];
$pays['amount'] = $item ['total_amount'];
$pays['total_amount'] = $item ['total_amount'];
$result = A('Pay/PayContinent')->pay($pays, $merchantid, $adminid, $storeid, $orderInfo, $orderid);
} else {
$data["status"] = 0;
$data["msg"] = "支付宝未配置";
$this->ajaxReturn($data);
}
vendor('AopSDK.request.AlipayTradePayRequest');
$request = new \AlipayTradePayRequest();
$request->setBizContent(json_encode($item));
if ($config["status"] == 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_pay_response'];
$result['status'] = 1;
return $result;
} else if (!empty($resultCode) && $resultCode == 10003) { //需要用户输入支付密码
$this->searchAndUpdateOrder($item['out_trade_no'], $storeid, $adminid, $merchantid, $orderInfo, $orderid);
} else { //交易失败
$result['status'] = 0;
$result['msg'] = json_decode(($result), true)['alipay_trade_pay_response']['sub_msg'];
// $result['msg'] = '交易失败';
$result['error_msg'] = json_encode($result);
return $result;
}
}
//支付金额过大用户输入支付密码,反复请求支付结果,超时就撤销订单,会有返回值
public function searchAndUpdateOrder($out_trade_no, $storeid, $adminid, $merchantid, $orderInfo, $orderid)
{
$res = $this->inquire_order($out_trade_no, $storeid);
if ($res['trade_status'] == 'WAIT_BUYER_PAY') {
//用户支付中
$time = get_runtime();
if ($time < 40) {
$this->searchAndUpdateOrder($out_trade_no, $storeid, $adminid, $merchantid, $orderInfo, $orderid);
} else {
//超时,撤销订单
$data = $this->revocation($out_trade_no,$storeid);
$this->ajaxReturn($data);
}
} else if ($res['trade_status'] == 'TRADE_SUCCESS') {
//支付成功
$PayOrderModel = D('PayOrder');
$save['trade_no'] = $res['trade_no'];
$save['order_state'] = 'SUCCESS';
$save['tradedate'] = strtotime($res['send_pay_date']);
$save['extend_content'] = json_encode($res);
$up = $PayOrderModel->updateOrder(array('out_trade_no' => strval($out_trade_no)), $save);
if ($up) {
A("Sellapi/PayRefund")->payOvers(4, $adminid, $storeid, $merchantid, $orderInfo, $orderid);
$data['status'] = 1;
$data['msg'] = '支付成功';
$data['out_trade_no'] = $out_trade_no;
$data['mdate'] = $save ['tradedate'];
$data['pay_type'] = "支付宝";
} else {
$data['status'] = 0;
$data['msg'] = '支付成功但订单更新失败,请联系管理员';
}
$this->ajaxReturn($data);
} else {
$data['status'] = 0;
$data['msg'] = '用户取消支付';
$this->ajaxReturn($data);
}
}
//订单查询接口
/* $out_trade_no 商家订单号
* */
public function inquire_order($out_trade_no, $storeid)
{
$config = D('Payset')->getFindConfig($storeid);//获取商户微信配置信息
vendor('AopSDK.AopClient');
$aop = new \AopClient ();
vendor('AopSDK.request.AlipayTradeQueryRequest');
if ($config["status"] == 1) {
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $config['alipay_appid'];
$aop->rsaPrivateKey = $config['alipay_private_key'];
$aop->alipayrsaPublicKey = $config['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
$request = new \AlipayTradeQueryRequest ();
$item['out_trade_no'] = $out_trade_no;
$request->setBizContent(json_encode($item));
$result = $aop->execute($request);
} else if ($config["status"] == 3) {
$id = $config["merchantid"];
$partnerid = M("retail_merchant")->where(array("id" => $id))->getField("partnerid");
$AliPay = M("systemconfig")->where(array('partnerid' => $partnerid))->find();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $AliPay['alipay_appid'];
$aop->rsaPrivateKey = $AliPay['alipay_private_key'];
$aop->alipayrsaPublicKey = $AliPay['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
$request = new \AlipayTradeQueryRequest ();
$item['out_trade_no'] = $out_trade_no;
$request->setBizContent(json_encode($item));
$result = $aop->execute($request, "", $config["alipay_token"]);
}
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if (!empty($resultCode) && $resultCode == 10000) {
return json_decode(json_encode($result), true)['alipay_trade_query_response'];
} else {
$data['status'] = 0;
$data['msg'] = '订单查询失败';
$this->ajaxReturn($data);
}
}
/*
* 支付撤销接口
*
* */
public function revocation($out_trade_no, $storeid)
{
$config = D('Payset')->getFindConfig($storeid);//获取商户微信配置信息
vendor('AopSDK.AopClient');
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $config['alipay_appid'];
$aop->rsaPrivateKey = $config['alipay_private_key'];
$aop->alipayrsaPublicKey = $config['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
vendor('AopSDK.request.AlipayTradeCancelRequest');
$request = new \AlipayTradeCancelRequest ();
$item['out_trade_no'] = $out_trade_no;
$request->setBizContent(json_encode($item));
$result = $aop->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if (!empty($resultCode) && $resultCode == 10000) {
$save['order_state'] = 'REVOKED';
$save['revokedate'] = time();
$PayOrderModel = D('PayOrder');
$up = $PayOrderModel->updateOrder(array('out_trade_no' => strval($out_trade_no)), $save);
if ($up) {
$data['status'] = 0;
$data['msg'] = '订单超时并已撤销';
} else {
$data['status'] = 0;
$data['msg'] = '订单超时并已撤销,但信息更新失败,请联系管理员';
}
} else {
$data['status'] = 0;
$data['msg'] = '超时但撤销订单失败';
}
return $data;
}
protected function refundtemp()
{
$config = D('Payset')->getFindConfig(3);//获取商户微信配置信息
vendor('AopSDK.AopClient');
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $config['alipay_appid'];
$aop->rsaPrivateKey = $config['alipay_private_key'];
$aop->alipayrsaPublicKey = $config['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
vendor('AopSDK.request.AlipayTradeRefundRequest');
$request = new \AlipayTradeRefundRequest();
$suc['trade_no'] = '2018082421001004620582639750';
$suc['refund_amount'] = 0.31;
$request->setBizContent(json_encode($suc));
$result = $aop->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if (!empty($resultCode) && $resultCode == 10000) {
print_r($result);
} else {
$data['status'] = 0;
$data['data'] = $result;
$data['msg'] = '商家支付宝余额不足';
}
$this->ajaxReturn($data);
}
//退款
public function refund($storeid, $trade_no, $itemAll)
{
$config = D('Payset')->getFindConfig($storeid);//获取商户微信配置信息
vendor('AopSDK.AopClient');
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $config['alipay_appid'];
$aop->rsaPrivateKey = $config['alipay_private_key'];
$aop->alipayrsaPublicKey = $config['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
vendor('AopSDK.request.AlipayTradeRefundRequest');
$request = new \AlipayTradeRefundRequest();
$suc['trade_no'] = $trade_no;
$suc['refund_amount'] = $itemAll['refund_money'];
$suc['out_request_no'] = $itemAll['out_refund_no'];
$request->setBizContent(json_encode($suc));
$result = $aop->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if (!empty($resultCode) && $resultCode == 10000) {
$this->searchRefund($trade_no, $itemAll);
} else {
$data['status'] = 0;
$data['data'] = $result;
$data['msg'] = '商家支付宝余额不足';
}
$this->ajaxReturn($data);
}
//退款查询接口
public function searchRefund($trade_no, $itemAll)
{
$PayOrder = D('PayOrder');
$Order = $PayOrder->getFind(array('trade_no' => $trade_no));
$config = D('Payset')->getFindConfig($Order['storeid']);//获取商户微信配置信息
vendor('AopSDK.AopClient');
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $config['alipay_appid'];
$aop->rsaPrivateKey = $config['alipay_private_key'];
$aop->alipayrsaPublicKey = $config['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
vendor('AopSDK.request.AlipayTradeFastpayRefundQueryRequest');
$request = new \AlipayTradeFastpayRefundQueryRequest();
$suc['trade_no'] = $trade_no;
$suc['out_request_no'] = $itemAll['out_refund_no'];
$request->setBizContent(json_encode($suc));
$result = $aop->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if (!empty($resultCode) && $resultCode == 10000) {
$return = json_decode(json_encode($result), true)['alipay_trade_fastpay_refund_query_response'];
if ($return['msg'] == 'Success') {
$save['goods_info'] = json_encode($itemAll['original_order']);
$res = $PayOrder->updateOrder(array('trade_no' => $trade_no), $save);
if ($res) {
$time = time();
$item['pid'] = $Order['id'];
$item['order_type'] = 3;//退款
$item['pay_type'] = $Order['pay_type'];
$item['trade_amount'] = $itemAll['refund_money'];
$item['storeid'] = $Order['storeid'];
$item['adminid'] = $itemAll['adminid'];
$item['order_state'] = 'REFUND';
$item['cdate'] = $time;
$item['extend_content'] = json_encode($return);
$item['goods_info'] = json_encode($itemAll['refund_goods_info']);
$item['out_trade_no'] = $itemAll['out_refund_no'];
$item['remark'] = '退款成功';
$addRefund = $PayOrder->addOrder($item);
A('Sellapi/Order')->refund(json_encode($itemAll['refund_goods_info']), $Order['storeid'], $Order['id'], $itemAll['adminid'], $Order['pay_type'] == 1 ? 3 : 4, $Order['id']);
if ($addRefund) {
$data['status'] = 1;
$data['msg'] = "退款成功";
} else {
$data['status'] = 0;
$data['msg'] = "已提交退款申请
更新订单失败";
}
} else {
$data['status'] = 0;
$data['msg'] = "已提交退款申请
更新订单失败";
}
} else {
$data['status'] = 0;
$data['data'] = $result;
$data['msg'] = '退款失败请重试';
}
} else {
$data['status'] = 0;
$data['data'] = $result;
$data['msg'] = '退款失败';
}
$this->ajaxReturn($data);
}
public function oemrefund($storeid, $trade_no, $itemAll)
{
$config = D('Payset')->getFindConfig($storeid);//获取商户微信配置信息
if (empty($config)) {
$data['status'] = 0;
$data['msg'] = '商家支付参数未配置';
$this->ajaxReturn($data);
}
if ($config["status"] == 1) {
// 普通模式
$this->ptrefund($storeid, $trade_no, $itemAll);
} else if ($config["status"] == 3) {
// 服务商模式
$this->fwsrefund($storeid, $trade_no, $itemAll);
} else if ($config["status"] == 4) {
//新大陆支付 退款
} else {
$data["status"] = 0;
$data["msg"] = "支付宝未配置";
$this->ajaxReturn($data);
}
}
/*
* 10-30 普通模式退款
* */
//退款
public function ptrefund($storeid, $trade_no, $itemAll)
{
$config = D('Payset')->getFindConfig($storeid);//获取商户微信配置信息
vendor('AopSDK.AopClient');
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $config['alipay_appid'];
$aop->rsaPrivateKey = $config['alipay_private_key'];
$aop->alipayrsaPublicKey = $config['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
vendor('AopSDK.request.AlipayTradeRefundRequest');
$request = new \AlipayTradeRefundRequest();
$suc['trade_no'] = $trade_no;
$suc['refund_amount'] = $itemAll['refund_money'];
$suc['out_request_no'] = $itemAll['out_refund_no'];
$request->setBizContent(json_encode($suc));
$result = $aop->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
file_put_contents('al_test.txt',json_encode($request)."\r\n",FILE_APPEND);
if (!empty($resultCode) && $resultCode == 10000) {
$this->ptsearchRefund($trade_no, $itemAll, $config);
} else {
$data['status'] = 0;
$data['data'] = $result;
$data['msg'] = '商家支付宝余额不足';
}
$this->ajaxReturn($data);
}
/*
* 10-30 普通模式退款
* */
//退款查询接口
public function ptsearchRefund($trade_no, $itemAll, $config)
{
$PayOrder = D('PayOrder');
$Order = $PayOrder->getFind(array('trade_no' => $trade_no));
vendor('AopSDK.AopClient');
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $config['alipay_appid'];
$aop->rsaPrivateKey = $config['alipay_private_key'];
$aop->alipayrsaPublicKey = $config['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
vendor('AopSDK.request.AlipayTradeFastpayRefundQueryRequest');
$request = new \AlipayTradeFastpayRefundQueryRequest();
$suc['trade_no'] = $trade_no;
$suc['out_request_no'] = $itemAll['out_refund_no'];
$request->setBizContent(json_encode($suc));
$result = $aop->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if (!empty($resultCode) && $resultCode == 10000) {
$returndata = json_decode(json_encode($result), true);
$return = $returndata['alipay_trade_fastpay_refund_query_response'];
$msg = $return['msg'];
if ($msg == 'Success') {
$time = time();
$item['pid'] = $Order['id'];
$item['order_type'] = 3;//退款
$item['pay_type'] = $Order['pay_type'];
$item['trade_amount'] = $itemAll['refund_money'];
$item['storeid'] = $Order['storeid'];
$item['adminid'] = $itemAll['adminid'];
$item['order_state'] = 'REFUND';
$item['cdate'] = $time;
$item['extend_content'] = json_encode($return);
$item['goods_info'] = json_encode($itemAll['refund_goods_info']);
$item['out_trade_no'] = $itemAll['out_refund_no'];
$item['remark'] = '退款成功';
$addRefund = $PayOrder->addOrder($item);
// 退货回商品库
$merchantid = M('retail_store')->where(array('id' => $Order['storeid']))->getField('merchantid');
$res2 = A('Sellapi/Refund')->hasOrderRefund($itemAll['adminid'], $itemAll['refund_goods_info'], $Order['storeid'], $merchantid, $itemAll['oldorderid'], $addRefund);
if ($res2['status'] == 0) {
$data['msg2'] = $res2['msg'];
}
// A('Sellapi/Order')->refund(json_encode($itemAll['refund_goods_info']), $Order['storeid'], $Order['id'], $itemAll['adminid'], $Order['pay_type'] == 1 ? 3 : 4, $Order['id']);
if ($addRefund) {
$data['status'] = 1;
$data['msg'] = "退款成功";
} else {
$data['status'] = 0;
$data['msg'] = "已提交退款申请
更新订单失败";
}
// } else {
// $data['status'] = 0;
// $data['msg'] = "已提交退款申请
更新订单失败";
// }
} else {
$data['status'] = 0;
$data['data'] = $result;
$data['msg'] = '退款失败请重试';
}
} else {
$data['status'] = 0;
$data['data'] = $result;
$data['msg'] = '退款失败';
}
$this->ajaxReturn($data);
}
/*
* 10-30 服务商模式商户退款
* */
//退款
public function fwsrefund($storeid, $trade_no, $itemAll)
{
$config = D('Payset')->getFindConfig($storeid);//获取商户微信配置信息
$id = $config["merchantid"];
$partnerid = M("retail_merchant")->where(array("id" => $id))->getField("partnerid");
$AliPay = M("systemconfig")->where(array("partnerid" => $partnerid))->find();
file_put_contents('./alipayrefund2.txt', json_encode($AliPay) . "\r\n", FILE_APPEND);
vendor('AopSDK.AopClient');
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $AliPay['alipay_appid'];
$aop->rsaPrivateKey = $AliPay['alipay_private_key'];
$aop->alipayrsaPublicKey = $AliPay['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
vendor('AopSDK.request.AlipayTradeRefundRequest');
$request = new \AlipayTradeRefundRequest();
$suc['trade_no'] = $trade_no;
$suc['refund_amount'] = $itemAll['refund_money'];
file_put_contents('./alipayrefund2.txt', json_encode($suc) . "\r\n", FILE_APPEND);
$request->setBizContent(json_encode($suc));
$result = $aop->execute($request, "", $config["alipay_token"]);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
file_put_contents('./alipayrefund2.txt', json_encode($result) . "\r\n", FILE_APPEND);
if (!empty($resultCode) && $resultCode == 10000) {
$this->fwssearchRefund($trade_no, $AliPay, $itemAll, $config);
} else {
$data['status'] = 0;
$data['data'] = $result;
$data['msg'] = '商家支付宝余额不足';
}
$this->ajaxReturn($data);
}
/*
* 10-30 服务商模式商户退款
* */
//退款查询接口
public function fwssearchRefund($trade_no, $AliPay, $itemAll, $config)
{
$PayOrder = D('PayOrder');
$Order = $PayOrder->getFind(array('trade_no' => $trade_no));
vendor('AopSDK.AopClient');
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $AliPay['alipay_appid'];
$aop->rsaPrivateKey = $AliPay['alipay_private_key'];
$aop->alipayrsaPublicKey = $AliPay['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
vendor('AopSDK.request.AlipayTradeFastpayRefundQueryRequest');
$request = new \AlipayTradeFastpayRefundQueryRequest();
$suc['trade_no'] = $trade_no;
$suc['out_request_no'] = $Order['out_trade_no'];
$request->setBizContent(json_encode($suc));
$result = $aop->execute($request, "", $config["alipay_token"]);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if (!empty($resultCode) && $resultCode == 10000) {
$returndata = json_decode(json_encode($result), true);
$return = $returndata['alipay_trade_fastpay_refund_query_response'];
$msg = $return['msg'];
if ($msg == 'Success') {
$save['goods_info'] = json_encode($itemAll['original_order']);
$res = $PayOrder->updateOrder(array('trade_no' => $trade_no), $save);
if ($res) {
$time = time();
$item['pid'] = $Order['id'];
$item['order_type'] = 3;//退款
$item['pay_type'] = $Order['pay_type'];
$item['trade_amount'] = $itemAll['refund_money'];
$item['storeid'] = $Order['storeid'];
$item['adminid'] = $itemAll['adminid'];
$item['order_state'] = 'REFUND';
$item['cdate'] = $time;
$item['extend_content'] = json_encode($return);
$item['goods_info'] = json_encode($itemAll['refund_goods_info']);
$item['out_trade_no'] = $itemAll['out_refund_no'];
$item['remark'] = '退款成功';
$addRefund = $PayOrder->addOrder($item);
// 退货回商品库
$merchantid = M('retail_store')->where(array('id' => $Order['storeid']))->getField('merchantid');
$res = A('Sellapi/Refund')->hasOrderRefund($itemAll['adminid'], $itemAll['refund_goods_info'], $Order['storeid'], $merchantid, $itemAll['oldorderid'], $addRefund);
if ($res['status'] == 0) {
$data['msg2'] = $res['msg'];
}
if ($addRefund) {
$data['status'] = 1;
$data['msg'] = "退款成功";
} else {
$data['status'] = 0;
$data['msg'] = "已提交退款申请
更新订单失败";
}
} else {
$data['status'] = 0;
$data['msg'] = "已提交退款申请
更新订单失败";
}
} else {
$data['status'] = 0;
$data['data'] = $result;
$data['msg'] = '退款失败请重试';
}
} else {
$data['status'] = 0;
$data['data'] = $result;
$data['msg'] = '退款失败';
}
$this->ajaxReturn($data);
}
/**
* 2018-10-31 修改支付流程
*/
//支付宝
public function toAliPaybackups($Order, $bill_id, $config)
{
$item ['out_trade_no'] = $Order['out_trade_no'];
$item ['auth_code'] = $Order['code'];
$item ['subject'] = D('Store')->getFind(array('id' => $Order['storeid']))['storetag'];
$item ['total_amount'] = $Order['trade_amount'];
$item ['scene'] = 'bar_code';
$alicodepay = $this->alCodePaybackups($item, $Order, $bill_id, $config);
if ($alicodepay['status'] == 1) {
//收款成功
$save['trade_no'] = $alicodepay['trade_no'];
$save['order_state'] = 'SUCCESS';
$save['tradedate'] = time();
$save['extend_content'] = json_encode($alicodepay);
$PayOrderModel = D('PayOrder');
$update = $PayOrderModel->updateOrder(array('id' => $Order['id']), $save);
if ($update) {
$data['status'] = 1;
$data['msg'] = '收款成功';
$data['out_trade_no'] = $Order['out_trade_no'];
$data['mdate'] = $save ['tradedate'];
$data['pay_type'] = "支付宝";
A('Sellapi/Pay')->wxChange($bill_id, 4);
} else {
$data['status'] = 0;
$data['msg'] = '收款成功,订单更新失败,请联系服务商';
}
} else {
//收款失败
$data['status'] = 0;
$data['msg'] = $alicodepay['msg'];
$this->ajaxReturn($data);
}
}
//2019-3-4加盟店店铺金额
public function toAliPaybackups_v1($Order, $bill_id, $config)
{
$item ['out_trade_no'] = $Order['out_trade_no'];
$item ['auth_code'] = $Order['code'];
$item ['subject'] = D('Store')->getFind(array('id' => $Order['storeid']))['storetag'];
$item ['total_amount'] = $Order['trade_amount'];
$item ['scene'] = 'bar_code';
$alicodepay = $this->alCodePaybackups($item, $Order, $bill_id, $config);
if ($alicodepay['status'] == 1) {
//收款成功
$save['trade_no'] = $alicodepay['trade_no'];
$save['order_state'] = 'SUCCESS';
$save['tradedate'] = time();
$save['extend_content'] = json_encode($alicodepay);
$PayOrderModel = D('PayOrder');
$update = $PayOrderModel->updateOrder(array('id' => $Order['id']), $save);
if ($update) {
$data['status'] = 1;
$data['msg'] = '收款成功';
$data['out_trade_no'] = $Order['out_trade_no'];
$data['mdate'] = $save ['tradedate'];
$data['pay_type'] = "支付宝";
A('Sellapi/Pay')->wxChange_v1($bill_id, 4);
} else {
$data['status'] = 0;
$data['msg'] = '收款成功,订单更新失败,请联系服务商';
}
} else {
//收款失败
$data['status'] = 0;
$data['msg'] = $alicodepay['msg'];
$this->ajaxReturn($data);
}
}
public function alCodePaybackups($item, $Order, $bill_id, $config)
{
vendor('AopSDK.AopClient');
if ($config["status"] == 1) {
if (empty($config['alipay_appid']) || empty($config['alipay_private_key']) || empty($config['alipay_public_key'])) {
$data['status'] = 0;
$data['msg'] = '商家支付宝参数未配置';
$this->ajaxReturn($data);
}
$aop = new \AopClient();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $config['alipay_appid'];
$aop->rsaPrivateKey = $config['alipay_private_key'];
$aop->alipayrsaPublicKey = $config['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
} else if ($config["status"] == 3) {
$id = $config["merchantid"];
$partnerid = M("retail_merchant")->where(array('id' => $id))->getField("partnerid");
$AliPay = M("systemconfig")->where(array("partnerid" => $partnerid))->find();
if(!empty($AliPay['alipay_pid'])){
$item ['extend_params'] = array('sys_service_provider_id' => $AliPay['alipay_pid']);
}
if (empty($AliPay['alipay_appid']) || empty($AliPay['alipay_private_key']) || empty($AliPay['alipay_public_key'])) {
$data['status'] = 0;
$data['msg'] = '商家支付宝参数未配置';
$this->ajaxReturn($data);
}
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $AliPay['alipay_appid'];
$aop->rsaPrivateKey = $AliPay['alipay_private_key'];
$aop->alipayrsaPublicKey = $AliPay['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
} else if ($config["status"] == 4) {
//新大陆支付
$continent['tradeNo'] = $item['out_trade_no'];
$continent['authCode'] = $item['auth_code'];
$continent['types'] = 1;
$continent['subject'] = $item['subject'];
$continent['amount'] = $item ['total_amount'];
$continent['total_amount'] = $item ['total_amount'];
A('Pay/PayContinent')->pay($continent, $Order, $bill_id);
exit;
} else {
$data["status"] = 0;
$data["msg"] = "支付宝未配置";
$this->ajaxReturn($data);
}
vendor('AopSDK.request.AlipayTradePayRequest');
$request = new \AlipayTradePayRequest();
$request->setBizContent(json_encode($item));
if ($config["status"] == 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_pay_response'];
$result['status'] = 1;
return $result;
} else if (!empty($resultCode) && $resultCode == 10003) { //需要用户输入支付密码
$this->searchAndUpdateOrderbackups($Order, $bill_id);
} else { //交易失败
$result1['status'] = 0;
$result1['msg'] = '交易失败';
$result1['error_msg'] = json_encode($result);
return $result1;
}
}
//支付金额过大用户输入支付密码,反复请求支付结果,超时就撤销订单,会有返回值
public function searchAndUpdateOrderbackups($Order, $bill_id)
{
$res = $this->inquire_order($Order['out_trade_no'], $Order['storeid']);
if ($res['trade_status'] == 'WAIT_BUYER_PAY') {
//用户支付中
$time = get_runtime();
if ($time < 40) {
$this->searchAndUpdateOrderbackups($Order, $bill_id);
} else {
//超时,撤销订单
$data = $this->revocation($Order['out_trade_no'],$Order['storeid']);
$this->ajaxReturn($data);
}
} else if ($res['trade_status'] == 'TRADE_SUCCESS') {
//支付成功
$PayOrderModel = D('PayOrder');
$save['trade_no'] = $res['trade_no'];
$save['order_state'] = 'SUCCESS';
$save['tradedate'] = strtotime($res['send_pay_date']);
$save['extend_content'] = json_encode($res);
$up = $PayOrderModel->updateOrder(array('out_trade_no' => strval($Order['out_trade_no'])), $save);
if ($up) {
$data['status'] = 1;
$data['msg'] = '支付成功';
$data['out_trade_no'] = $Order['out_trade_no'];
$data['mdate'] = $save ['tradedate'];
$data['pay_type'] = "支付宝";
A('Sellapi/Pay')->wxChange($bill_id, 4);
} else {
$data['status'] = 0;
$data['msg'] = '支付成功但订单更新失败,请联系管理员';
}
$this->ajaxReturn($data);
} else {
$data['status'] = 0;
$data['msg'] = '用户取消支付';
$this->ajaxReturn($data);
}
}
/*
* 2018-11-16 退款
* */
public function newRefund_v1($trade_no, $itemAll, $pay_order)
{
if ($pay_order['m_pay_type'] == 1) {
$res = $this->ptRefund_v1($trade_no, $itemAll); // 普通模式退款 商家自己配置的支付
} else if ($pay_order['m_pay_type'] == 2) {
$res = $this->fwsRefund_v1($trade_no, $itemAll); //查询合作伙伴配置 服务商模式支付退款
} else if ($pay_order['m_pay_type'] == 3) {
$res = A('Pay/PayContinent')->newRefund_v1($trade_no, $itemAll['merchantid'], $itemAll);//新大陆支付退款
} else {
$res['status'] = 1;
$res['msg'] = '订单信息有误';
}
return $res;
}
/*
* 2018-11-16 普通模式退款
* */
public function ptRefund_v1($trade_no, $itemAll)
{
$config = D('Payset')->getFindConfig($itemAll['storeid']);//获取商户微信配置信息
vendor('AopSDK.AopClient');
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $config['alipay_appid'];
$aop->rsaPrivateKey = $config['alipay_private_key'];
$aop->alipayrsaPublicKey = $config['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
vendor('AopSDK.request.AlipayTradeRefundRequest');
$request = new \AlipayTradeRefundRequest();
$suc['trade_no'] = $trade_no;
$suc['refund_amount'] = $itemAll['refund_money'];
$suc['out_request_no'] = $itemAll['out_refund_no'];
$request->setBizContent(json_encode($suc));
$result = $aop->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if (!empty($resultCode) && $resultCode == 10000) {
$res = $this->ptSearchRefund_v1($trade_no, $itemAll, $config);
} else {
$res['status'] = 0;
$res['data'] = $result;
$res['msg'] = '退款失败,请商家检查支付宝可用余额1';
}
return $res;
}
/*
* 2018-11-16 普通模式退款
* */
//退款查询接口
public function ptSearchRefund_v1($trade_no, $itemAll, $config)
{
vendor('AopSDK.AopClient');
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $config['alipay_appid'];
$aop->rsaPrivateKey = $config['alipay_private_key'];
$aop->alipayrsaPublicKey = $config['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
vendor('AopSDK.request.AlipayTradeFastpayRefundQueryRequest');
$request = new \AlipayTradeFastpayRefundQueryRequest();
$suc['trade_no'] = $trade_no;
$suc['out_request_no'] = $itemAll['out_refund_no'];
$request->setBizContent(json_encode($suc));
$result = $aop->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if (!empty($resultCode) && $resultCode == 10000) {
$returndata = json_decode(json_encode($result), true)['alipay_trade_fastpay_refund_query_response'];
if ($returndata['msg'] == 'Success') {
$res['status'] = 1;
$res['data'] = $returndata;
$res['msg'] = '退款成功';
} else {
$res['status'] = 0;
$res['data'] = $returndata;
$res['msg'] = '退款失败请重试';
}
} else {
$res['status'] = 0;
$res['data'] = $result;
$res['msg'] = '退款失败';
}
return $res;
}
/*
* 2018-11-16 服务商模式商户退款
* */
//退款
public function fwsRefund_v1($trade_no, $itemAll)
{
$config = D('Payset')->getFindConfig($itemAll['storeid']);//获取商户微信配置信息
$partnerid = M("retail_merchant")->where(array("id" => $config["merchantid"]))->getField("partnerid");
$AliPay = M("systemconfig")->where(array("partnerid" => $partnerid))->find();
vendor('AopSDK.AopClient');
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $AliPay['alipay_appid'];
$aop->rsaPrivateKey = $AliPay['alipay_private_key'];
$aop->alipayrsaPublicKey = $AliPay['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
vendor('AopSDK.request.AlipayTradeRefundRequest');
$request = new \AlipayTradeRefundRequest();
$suc['trade_no'] = $trade_no;
$suc['refund_amount'] = $itemAll['refund_money'];
$request->setBizContent(json_encode($suc));
$result = $aop->execute($request, "", $config["alipay_token"]);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if (!empty($resultCode) && $resultCode == 10000) {
$res = $this->fwsSearchRefund_v1($trade_no, $AliPay, $config);
} else {
$res['status'] = 0;
$res['data'] = $result;
$res['AliPay'] = $AliPay;
$res['msg'] = '退款失败,请商家检查支付宝可用余额';
}
return $res;
}
/*
* 2018-11-16 服务商模式商户退款
* */
//退款查询接口
public function fwsSearchRefund_v1($trade_no, $AliPay, $config)
{
$PayOrder = D('PayOrder');
$Order = $PayOrder->getFind(array('trade_no' => $trade_no));
vendor('AopSDK.AopClient');
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $AliPay['alipay_appid'];
$aop->rsaPrivateKey = $AliPay['alipay_private_key'];
$aop->alipayrsaPublicKey = $AliPay['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
vendor('AopSDK.request.AlipayTradeFastpayRefundQueryRequest');
$request = new \AlipayTradeFastpayRefundQueryRequest();
$suc['trade_no'] = $trade_no;
$suc['out_request_no'] = $Order['out_trade_no'];
$request->setBizContent(json_encode($suc));
$result = $aop->execute($request, "", $config["alipay_token"]);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if (!empty($resultCode) && $resultCode == 10000) {
$returndata = json_decode(json_encode($result), true)['alipay_trade_fastpay_refund_query_response'];
if ($returndata['msg'] == 'Success') {
$res['status'] = 1;
$res['data'] = $returndata;
$res['msg'] = '退款成功';
} else {
$res['status'] = 0;
$res['data'] = $returndata;
$res['msg'] = '退款失败请重试';
}
} else {
$res['status'] = 0;
$res['data'] = $result;
$res['msg'] = '退款失败';
}
return $res;
}
/*
* 2018-11-28 充值
* */
public function toAliPayRecharge($order, $config){
$item ['out_trade_no'] = $order['out_trade_no'];
$item ['subject'] = D('Store')->getFind(array('id' => $order['storeid']))['storetag'];
$item ['total_amount'] = $order['trade_amount'];
if(!empty($order['face_token'])){
$item ['scene'] = 'security_code';
$item ['auth_code'] = $order['face_token'];
}else{
$item ['auth_code'] = $order['code'];
$item ['scene'] = 'bar_code';
}
$aliCodePay = $this->alCodePayRecharge($item, $order, $config);
if ($aliCodePay['status'] == 1) {
//收款成功
$save['trade_no'] = $aliCodePay['trade_no'];
$save['order_state'] = 'SUCCESS';
$save['tradedate'] = time();
$save['extend_content'] = json_encode($aliCodePay);
$PayOrderModel = D('PayOrder');
$update = $PayOrderModel->updateOrder(array('id' => $order['id']), $save);
$this->vipRecharge($order,$config['merchantid']);
// 充值送次卡
A('Xcxapi/VipCard')->rechargeGiveCard($order['merchantid'],$order['vid'],$order['trade_amount'],2);
if ($update) {
$data['status'] = 1;
$data['order_id'] = $order['id'];
$data['msg'] = '充值成功';
} else {
$data['status'] = 0;
$data['msg'] = '收款成功,订单更新失败,请联系服务商';
}
} else {
//收款失败
$data['status'] = 0;
$data['msg'] = $aliCodePay['msg'];
}
$this->ajaxReturn($data);
}
private function alCodePayRecharge($item, $order, $config){
vendor('AopSDK.AopClient');
if ($order["m_pay_type"] == 1) {
$aop = new \AopClient();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $config['alipay_appid'];
$aop->rsaPrivateKey = $config['alipay_private_key'];
$aop->alipayrsaPublicKey = $config['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
} else if ($order["m_pay_type"] == 2) {
$id = $config["merchantid"];
$partnerid = M("retail_merchant")->where(array('id' => $id))->getField("partnerid");
$AliPay = M("systemconfig")->where(array("partnerid" => $partnerid))->find();
if(!empty($AliPay['alipay_pid'])){
$item ['extend_params'] = array('sys_service_provider_id' => $AliPay['alipay_pid']);
}
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $AliPay['alipay_appid'];
$aop->rsaPrivateKey = $AliPay['alipay_private_key'];
$aop->alipayrsaPublicKey = $AliPay['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset = 'utf-8';
$aop->format = 'json';
} else if ($order["m_pay_type"] == 3) {
//新大陆支付
$continent['tradeNo'] = $order['out_trade_no'];
$continent['authCode'] = $order['code'];
$continent['type'] = 1;
$continent['subject'] = '测试';
$continent['amount'] = $order['trade_amount'];
$continent['total_amount'] = $order['trade_amount'];
A('Pay/PayContinent')->payRecharge($continent, $config["merchantid"], $order);
} else {
$data["status"] = 0;
$data["msg"] = "支付宝未配置";
$this->ajaxReturn($data);
}
vendor('AopSDK.request.AlipayTradePayRequest');
$request = new \AlipayTradePayRequest();
$request->setBizContent(json_encode($item));
if ($order["m_pay_type"] == 1) {
$result = $aop->execute($request);
} else {
$result = $aop->execute($request, "", $config["alipay_token"]);
}
// print_r($item);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if (!empty($resultCode) && $resultCode == 10000) { //交易成功
$result = json_decode(json_encode($result), true)['alipay_trade_pay_response'];
$result['status'] = 1;
return $result;
} else if (!empty($resultCode) && $resultCode == 10003) { //需要用户输入支付密码
$this->searchAndUpdateOrderRecharge($order, $config['merchantid']);
} else { //交易失败
$result1['status'] = 0;
$result1['msg'] = json_decode($result, true)['alipay_trade_pay_response']['sub_msg'];
$result1['error_msg'] = json_encode($result);
// print_r($result);
return $result1;
}
}
private function searchAndUpdateOrderRecharge($order,$merchantid){
$res = $this->inquire_order($order['out_trade_no'], $order['storeid']);
if ($res['trade_status'] == 'WAIT_BUYER_PAY') {
//用户支付中
$time = get_runtime();
if ($time < 40) {
$this->searchAndUpdateOrderRecharge($order,$merchantid);
} else {
//超时,撤销订单
$data = $this->revocation($order['out_trade_no'],$order['storeid']);
$this->ajaxReturn($data);
}
} else if ($res['trade_status'] == 'TRADE_SUCCESS') {
//支付成功
$PayOrderModel = D('PayOrder');
$save['trade_no'] = $res['trade_no'];
$save['order_state'] = 'SUCCESS';
$save['tradedate'] = strtotime($res['send_pay_date']);
$save['extend_content'] = json_encode($res);
$up = $PayOrderModel->updateOrder(array('out_trade_no' => strval($order['out_trade_no'])), $save);
$this->vipRecharge($order, $merchantid);
if ($up) {
$data['status'] = 1;
$data['msg'] = '充值成功';
$data['order_id'] = $order['id'];
} else {
$data['status'] = 1;
$data['msg'] = '充值成功但订单更新失败,请联系管理员';
$data['order_id'] = $order['id'];
}
$this->ajaxReturn($data);
} else {
$data['status'] = 0;
$data['msg'] = '用户取消支付';
$this->ajaxReturn($data);
}
}
/*public function aliorder(){
vendor('AopSDK.AopClient');
vendor('AopSDK.request.AlipayDataDataserviceBillDownloadurlQueryRequest');
$AliPay = M("systemconfig")->where(array("id" => 16))->find();
print_r($AliPay);
exit;
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $AliPay['alipay_appid'];
$aop->rsaPrivateKey = $AliPay['alipay_private_key'];
$aop->alipayrsaPublicKey = $AliPay['alipay_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset='utf-8';
$aop->format='json';
$request = new \AlipayDataDataserviceBillDownloadurlQueryRequest ();
$request->setBizContent("{" .
"\"bill_type\":\"trade\"," .
"\"bill_date\":\"2019-01-14\"" .
" }");
$result = $aop->execute ( $request ,"","201901BBe25e7e830b444c85b997644a7252fE26");
echo "";
print_r($result);
}*/
}