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); }*/ }