91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用php怎么實現微信支付退款功能

發布時間:2021-05-22 16:28:03 來源:億速云 閱讀:240 作者:Leah 欄目:開發技術

使用php怎么實現微信支付退款功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

需要注意的事項:

1.微信退款到零錢要求必傳證書,需要到這里賬戶中心->賬戶設置->API安全->下載證書,然后修改代碼中的證書路徑
2.該文件需放到支付授權目錄下,可以在微信支付商戶平臺->產品中心->開發配置中設置。
3.如提示簽名錯誤可以通過微信支付簽名驗證工具進行驗證:微信公眾平臺支付接口調試工具
4.錯誤碼參照:參照地址

代碼如下:

<?php
/**
 * 關于微信退款的說明
 * 1.微信退款要求必傳證書,需要到https://pay.weixin.qq.com 賬戶中心->賬戶設置->API安全->下載證書,證書路徑在第119行和122行修改
 * 2.錯誤碼參照 :https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4
 */
header('Content-type:text/html; Charset=utf-8');
$mchid = 'xxxxx';     //微信支付商戶號 PartnerID 通過微信支付商戶資料審核后郵件發送
$appid = 'xxxxx'; //微信支付申請對應的公眾號的APPID
$apiKey = 'xxxxx';  //https://pay.weixin.qq.com 帳戶設置-安全設置-API安全-API密鑰-設置API密鑰
$orderNo = '';           //商戶訂單號(商戶訂單號與微信訂單號二選一,至少填一個)
$wxOrderNo = '';           //微信訂單號(商戶訂單號與微信訂單號二選一,至少填一個)
$totalFee = 0.01;          //訂單金額,單位:元
$refundFee = 0.01;         //退款金額,單位:元
$refundNo = 'refund_'.uniqid();    //退款訂單號(可隨機生成)
$wxPay = new WxpayService($mchid,$appid,$apiKey);
$result = $wxPay->doRefund($totalFee, $refundFee, $refundNo, $wxOrderNo,$orderNo);
if($result===true){
  echo 'refund success';exit();
}
echo 'refund fail';
class WxpayService
{
  protected $mchid;
  protected $appid;
  protected $apiKey;
  public $data = null;
  public function __construct($mchid, $appid, $key)
  {
    $this->mchid = $mchid; //https://pay.weixin.qq.com 產品中心-開發配置-商戶號
    $this->appid = $appid; //微信支付申請對應的公眾號的APPID
    $this->apiKey = $key;  //https://pay.weixin.qq.com 帳戶設置-安全設置-API安全-API密鑰-設置API密鑰
  }
  /**
   * 退款
   * @param float $totalFee 訂單金額 單位元
   * @param float $refundFee 退款金額 單位元
   * @param string $refundNo 退款單號
   * @param string $wxOrderNo 微信訂單號
   * @param string $orderNo 商戶訂單號
   * @return string
   */
  public function doRefund($totalFee, $refundFee, $refundNo, $wxOrderNo='',$orderNo='')
  {
    $config = array(
      'mch_id' => $this->mchid,
      'appid' => $this->appid,
      'key' => $this->apiKey,
    );
    $unified = array(
      'appid' => $config['appid'],
      'mch_id' => $config['mch_id'],
      'nonce_str' => self::createNonceStr(),
      'total_fee' => intval($totalFee * 100),    //訂單金額  單位 轉為分
      'refund_fee' => intval($refundFee * 100),    //退款金額 單位 轉為分
      'sign_type' => 'MD5',      //簽名類型 支持HMAC-SHA256和MD5,默認為MD5
      'transaction_id'=>$wxOrderNo,        //微信訂單號
      'out_trade_no'=>$orderNo,    //商戶訂單號
      'out_refund_no'=>$refundNo,    //商戶退款單號
      'refund_desc'=>'商品已售完',   //退款原因(選填)
    );
    $unified['sign'] = self::getSign($unified, $config['key']);
    $responseXml = $this->curlPost('https://api.mch.weixin.qq.com/secapi/pay/refund', self::arrayToXml($unified));
    $unifiedOrder = simplexml_load_string($responseXml, 'SimpleXMLElement', LIBXML_NOCDATA);
    if ($unifiedOrder === false) {
      die('parse xml error');
    }
    if ($unifiedOrder->return_code != 'SUCCESS') {
      die($unifiedOrder->return_msg);
    }
    if ($unifiedOrder->result_code != 'SUCCESS') {
      die($unifiedOrder->err_code);
    }
    return true;
  }
  public static function curlGet($url = '', $options = array())
  {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    if (!empty($options)) {
      curl_setopt_array($ch, $options);
    }
    //https請求 不驗證證書和host
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
  }
  public function curlPost($url = '', $postData = '', $options = array())
  {
    if (is_array($postData)) {
      $postData = http_build_query($postData);
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); //設置cURL允許執行的最長秒數
    if (!empty($options)) {
      curl_setopt_array($ch, $options);
    }
    //https請求 不驗證證書和host
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    //第一種方法,cert 與 key 分別屬于兩個.pem文件
    //默認格式為PEM,可以注釋
    curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
    curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/cert/apiclient_cert.pem');
    //默認格式為PEM,可以注釋
    curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
    curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/cert/apiclient_key.pem');
    //第二種方式,兩個文件合成一個.pem文件
//    curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem');
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
  }
  public static function createNonceStr($length = 16)
  {
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $str = '';
    for ($i = 0; $i < $length; $i++) {
      $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
  }
  public static function arrayToXml($arr)
  {
    $xml = "<xml>";
    foreach ($arr as $key => $val) {
      if (is_numeric($val)) {
        $xml .= "<" . $key . ">" . $val . "</" . $key . ">";
      } else
        $xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
    }
    $xml .= "</xml>";
    return $xml;
  }
  public static function getSign($params, $key)
  {
    ksort($params, SORT_STRING);
    $unSignParaString = self::formatQueryParaMap($params, false);
    $signStr = strtoupper(md5($unSignParaString . "&key=" . $key));
    return $signStr;
  }
  protected static function formatQueryParaMap($paraMap, $urlEncode = false)
  {
    $buff = "";
    ksort($paraMap);
    foreach ($paraMap as $k => $v) {
      if (null != $v && "null" != $v) {
        if ($urlEncode) {
          $v = urlencode($v);
        }
        $buff .= $k . "=" . $v . "&";
      }
    }
    $reqPar = '';
    if (strlen($buff) > 0) {
      $reqPar = substr($buff, 0, strlen($buff) - 1);
    }
    return $reqPar;
  }
}
?>

php有什么用

php是一個嵌套的縮寫名稱,是英文超級文本預處理語言,它的語法混合了C、Java、Perl以及php自創新的語法,主要用來做網站開發,許多小型網站都用php開發,因為php是開源的,從而使得php經久不衰。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

双江| 汨罗市| 科尔| 大悟县| 商南县| 翼城县| 霍邱县| 盖州市| 外汇| 剑河县| 百色市| 济宁市| 文昌市| 垣曲县| 蒲江县| 大同市| 沅江市| 阿克苏市| 泽库县| 会泽县| 屏东县| 武汉市| 巴青县| 临江市| 江陵县| 都昌县| 原阳县| 桐梓县| 凉山| 喜德县| 天柱县| 通城县| 洛宁县| 长垣县| 满洲里市| 寻乌县| 图片| 慈利县| 滕州市| 大埔区| 高州市|