first commit

This commit is contained in:
编码猿
2024-09-27 01:32:49 +08:00
commit 28ebe05a64
7399 changed files with 1174529 additions and 0 deletions

View File

@@ -0,0 +1,131 @@
<?php
/**
* Created by PhpStorm.
* User: HIAPAD
* Date: 2018/9/25
* Time: 10:48
*/
namespace app\common\service;
use think\Exception;
use think\facade\Config;
use wxpayNew\lib\WxPayApi;
use wxpayNew\WxPayConfig;
class WxPayService
{
private $wxPayConfig;//配置对象
private $unifiedOrderObj;//统一下单输入对象
private $config;
public function __construct()
{
$this->config = Config::pull('wxpay');
$this->wxPayConfig = new WxPayConfig($this->config);
}
//统一下单
public function setWxpayOrderData($data)
{
$this->unifiedOrderObj = new \WxPayUnifiedOrder();
$this->unifiedOrderObj->SetBody($data['body']);
$this->unifiedOrderObj->SetAttach($data['attach'] ?? 'test');//设置附加数据在查询API和支付通知中原样返回该字段主要用于商户携带订单的自定义数据
$this->unifiedOrderObj->SetOut_trade_no($data['out_trade_no']);
$this->unifiedOrderObj->SetTotal_fee($data['total_fee']);
$this->unifiedOrderObj->SetTime_start(date("YmdHis"));
$this->unifiedOrderObj->SetTime_expire(date("YmdHis", time() + $data['time_expire']));
$this->unifiedOrderObj->SetNotify_url($this->config['NOTIFYURL']);
$this->unifiedOrderObj->SetTrade_type($data['trade_type']);
}
//统一下单
public function unifiedOrder()
{
$res = WxPayApi::unifiedOrder($this->wxPayConfig, $this->unifiedOrderObj);
if ($res['return_code'] == "SUCCESS" && $res['result_code'] == "SUCCESS") {
//根据微信支付返回的结果进行二次签名
//二次签名剩余参数的补充
$result = array(
"appid" => $this->config['WXAPPID'],
"partnerid" => $this->config['WXMCHID'],
"prepayid" => $res['prepay_id'],
"noncestr" => strtoupper(md5(uniqid(rand(10000, 99999)))),
"package" => "Sign=WXPay",
"timestamp" => time() . ""
);
$sign = self::getSign($result, $this->config['WXKEY'], $this->config['SIGNTYPE']);
$result['sign'] = $sign;
return $result;
} else {
throw new Exception('支付请求出现异常');
}
}
//二次签名
private static function getSign($arr, $appkey, $signType = 'md5')
{
ksort($arr);
$strInfo = '';
foreach ($arr as $key => $val) {
if ($val === '') {
continue;
}
if ($strInfo) {
$strInfo .= "&" . $key . "=" . $val;
} else {
$strInfo = $key . "=" . $val;
}
}
$strInfo = trim($strInfo, "&");
if ($signType == 'md5') {
return strtoupper(md5($strInfo . '&key=' . $appkey));
} elseif ($signType == 'sha1') {
return sha1($strInfo . '&key=' . $appkey);
} elseif ($signType == "HMAC-SHA256") {
return hash_hmac("sha256", $strInfo . '&key=' . $appkey, $appkey);
}
}
/**
* @param $transaction_id 微信订单号
* @param $total_fee 订单总金额
* @param $refund_fee 退款金额,不超过订单总金额
* @return \wxpayNew\lib\成功时返回,其他抛异常
* @throws Exception
* @throws \wxpayNew\lib\WxPayException
*/
public function refund($transaction_id,$total_fee,$refund_fee)
{
try {
$wxPayFound = new \WxPayRefund();
$wxPayFound->SetTransaction_id($transaction_id);
$wxPayFound->SetTotal_fee($total_fee);
$wxPayFound->SetRefund_fee($refund_fee);
$wxPayFound->SetOut_refund_no("sdkphp" . date("YmdHis"));
$wxPayFound->SetOp_user_id($this->wxPayConfig->GetMerchantId());
$res=WxPayApi::refund($this->wxPayConfig,$wxPayFound);
//返回结果处理
if(isset($res['return_code'])){
if($res['return_code']=='FAIL'){
throw new Exception("退款申请失败,原因:".$res['return_msg']);
}
if($res['return_code']=='SUCCESS'){
if($res['result_code']=='FAIL'){
throw new Exception("退款申请失败,原因:".$res['err_code_des']);
}
if($res['result_code']=='SUCCESS'){
return $res;//申请成功
}
}
}
throw new Exception('退款申请失败,原因:未知');
}catch (Exception $e) {
throw new Exception( $e->getMessage());
}
}
}