• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP实现微信退款的方法示例

    本文实例讲述了PHP实现微信退款的方法。分享给大家供大家参考,具体如下:

    $obj = new WXRefund('参数');
    $obj->refundApi();
    
    

    直接能用 公众号的参数 自己加上吧 只能帮你们到这了!

    ?php
    namespace Wechat;
    /**
     * 微信退款
     * @author    zzy
     * @version   $V1.0.0$
     * @date    2018-11-9
     */
    class WXRefund
    {
      protected $SSLCERT_PATH ='';//证书
      protected $SSLKEY_PATH = '';//证书
      protected $opUserId = '';//商户号
      protected $key = '';//API密钥
      protected $appId = '';//appId
      function __construct($outTradeNo, $totalFee, $outRefundNo, $refundFee)
      {
        //初始化退款类需要的变量
        $this->totalFee = $totalFee;//订单金额
        $this->refundFee = $refundFee;//退款金额
        $this->outTradeNo = $outTradeNo;//订单号
        $this->outRefundNo = $outRefundNo;//退款订单
      }
      /**
       * 通过微信api进行退款流程 唯一对外接口
       * @return string
       */
      public function refundApi()
      {
        $parma = array(
          'appid' => $this->appId,
          'mch_id' => $this->opUserId,
          'nonce_str' => randoms(32),//这个是随机数 自己封装去吧。。。
          'out_refund_no' => $this->outRefundNo,
          'out_trade_no' => $this->outTradeNo,
          'total_fee' => intval($this->totalFee * 100),
          'refund_fee' => intval($this->refundFee * 100),
        );
        $parma['sign'] = $this->getSign($parma, $this->key);
        $xmldata = $this->arrayToXml($parma);
        $xmlresult = $this->postXmlSSLCurl($xmldata, 'https://api.mch.weixin.qq.com/secapi/pay/refund');
        $result = $this->arrayToXml($xmlresult);
        return $result;
      }
      /**
       * 数组转xml
       * @param $arr
       * @return string
       */
      protected 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;
      }
      /**
       * 签名加密
       * @param $params
       * @param $key
       */
      protected function getSign($params, $key)
      {
        ksort($params, SORT_STRING);
        $unSignParaString = $this->formatQueryParaMap($params, false);
        return $signStr = strtoupper(md5($unSignParaString . "key=" . $key));
      }
      /**
       * 排序
       * @param $paraMap
       * @param bool $urlEncode
       * @return bool|string
       */
      protected 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;
      }
      /**
       * 需要使用证书的请求
       * @param $xml
       * @param $url
       * @param int $second
       * @return bool|mixed
       */
      protected function postXmlSSLCurl($xml, $url, $second = 30)
      {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_TIMEOUT, $second);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
        curl_setopt($ch, CURLOPT_SSLCERT, $this->SSLCERT_PATH);
        curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
        curl_setopt($ch, CURLOPT_SSLKEY, $this->SSLKEY_PATH);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
        $data = curl_exec($ch);
        if ($data) {
          curl_close($ch);
          return $data;
        } else {
          $error = curl_errno($ch);
          echo "curl出错,错误码:$error" . "br>";
          curl_close($ch);
          return false;
        }
      }
    }
    
    

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP微信开发技巧汇总》、《php curl用法总结》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《PHP中json格式数据操作技巧汇总》及《PHP针对XML文件操作技巧总结》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP实现的支付宝支付功能示例
    • PHP微信支付功能示例
    • PHP小程序支付功能完整版【基于thinkPHP】
    • PHP设计模式之单例模式定义与用法分析
    • docker搭建php+nginx+swoole+mysql+redis环境的方法
    • php+mysql开发中的经验与常识小结
    • PHP设计模式之抽象工厂模式实例分析
    • PHP设计模式之简单工厂和工厂模式实例分析
    • PHP实现无限极分类的两种方式示例【递归和引用方式】
    • PHP中localeconv()函数的用法
    上一篇:PHP设计模式之单例模式定义与用法分析
    下一篇:PHP小程序支付功能完整版【基于thinkPHP】
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP实现微信退款的方法示例 PHP,实现,微信,退款,的,方法,