114 lines
3.9 KiB
PHP
Executable File
114 lines
3.9 KiB
PHP
Executable File
<?php
|
|
namespace wstmart\admin\model;
|
|
use think\Loader;
|
|
use think\Db;
|
|
use Env;
|
|
use wstmart\common\model\Payments as M;
|
|
use wstmart\common\model\LogPayParams as PM;
|
|
/**
|
|
* ============================================================================
|
|
* 微信支付业务处理
|
|
*/
|
|
class Weixinpays extends Base{
|
|
|
|
/**
|
|
* 初始化
|
|
*/
|
|
private $wxpayConfig;
|
|
private $wxpay;
|
|
public function initialize() {
|
|
header ("Content-type: text/html; charset=utf-8");
|
|
require Env::get('root_path') . 'extend/wxpay/WxPayConf.php';
|
|
require Env::get('root_path') . 'extend/wxpay/WxJsApiPay.php';
|
|
$this->wxpayConfig = array();
|
|
$m = new M();
|
|
$this->wxpay = $m->getPayment("weixinpays");
|
|
$this->wxpayConfig['appid'] = $this->wxpay['appId']; // 微信公众号身份的唯一标识
|
|
$this->wxpayConfig['appsecret'] = $this->wxpay['appsecret']; // JSAPI接口中获取openid
|
|
$this->wxpayConfig['mchid'] = $this->wxpay['mchId']; // 受理商ID
|
|
$this->wxpayConfig['key'] = $this->wxpay['apiKey']; // 商户支付密钥Key
|
|
|
|
$this->wxpayConfig['apiclient_cert'] = WSTRootPath().'/extend/wxpay/cert/apiclient_cert.pem'; // 商户支付证书
|
|
$this->wxpayConfig['apiclient_key'] = WSTRootPath().'/extend/wxpay/cert/apiclient_key.pem'; // 商户支付证书
|
|
|
|
$this->wxpayConfig['curl_timeout'] = 30;
|
|
$this->wxpayConfig['notifyurl'] = url("admin/orderrefunds/wxrefundnodify","",true,true);
|
|
$this->wxpayConfig['returnurl'] = "";
|
|
// 初始化WxPayConf
|
|
new \WxPayConf($this->wxpayConfig);
|
|
}
|
|
|
|
/**
|
|
* 退款
|
|
*/
|
|
public function orderRefund($refund,$order){
|
|
|
|
$content = input('post.content');
|
|
$refundId = (int)input('post.id');
|
|
|
|
$wxrefund = new \Refund();
|
|
$refund_no = $order['orderNo'].$order['userId'];
|
|
$wxrefund->setParameter("transaction_id",$order['tradeNo']);//微信订单号
|
|
$wxrefund->setParameter("out_refund_no",$refund_no);//商户退款单号
|
|
$wxrefund->setParameter("total_fee",$order['totalPayFee']);//订单金额
|
|
$wxrefund->setParameter("refund_fee",$refund["backMoney"]*100);//退款金额
|
|
$wxrefund->setParameter("refund_fee_type","CNY");//货币种类
|
|
$wxrefund->setParameter("refund_desc","订单【".$order['orderNo']."】退款");//退款原因
|
|
$wxrefund->setParameter("notify_url",$this->wxpayConfig['notifyurl']);//退款原因
|
|
|
|
$payParams = [];
|
|
$payParams["userId"] = (int)$order['userId'];
|
|
$payParams["refundId"] = $refundId;
|
|
$payParams["isBatch"] = (int)$order['isBatch'];
|
|
$payParams["content"] = $content;
|
|
$pdata = array();
|
|
$pdata["userId"] = $order['userId'];
|
|
$pdata["transId"] = $refund_no;
|
|
$pdata["paramsVa"] = json_encode($payParams);
|
|
$pdata["payFrom"] = 'weixinpays';
|
|
$m = new PM();
|
|
$m->addPayLog($pdata);
|
|
$rs = $wxrefund->getResult();
|
|
if($rs["result_code"]=="SUCCESS"){
|
|
return WSTReturn("退款成功",1);
|
|
}else{
|
|
return WSTReturn($rs['err_code_des'],-1);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 异步通知
|
|
*/
|
|
public function notify(){
|
|
// 使用通用通知接口
|
|
$notify = new \Notify();
|
|
// 存储微信的回调
|
|
$xml = file_get_contents("php://input");
|
|
$notify->saveData ( $xml );
|
|
if ($notify->data ["return_code"] == "SUCCESS"){
|
|
$order = $notify->getData ();
|
|
$req_info = $order["req_info"];
|
|
|
|
$reqinfo = $notify->decryptReqinfo($req_info);//解密退款加密信息
|
|
$transId = $reqinfo["out_refund_no"];
|
|
$m = new PM();
|
|
$payParams = $m->getPayLog(["transId"=>$transId]);
|
|
$content = $payParams['content'];
|
|
$refundId = $payParams['refundId'];
|
|
|
|
$obj = array();
|
|
$obj['refundTradeNo'] = $reqinfo["refund_id"];//微信退款单号
|
|
$obj['content'] = $content;
|
|
$obj['refundId'] = $refundId;
|
|
$rs = model('admin/OrderRefunds')->complateOrderRefund($obj);
|
|
if($rs['status']==1){
|
|
echo "SUCCESS";
|
|
}else{
|
|
echo "FAIL";
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|