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

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

$obj = new WXRefund('参数');

$obj->refundApi();

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

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 = "";

foreach ($arr as $key => $val) {

if (is_numeric($val)) {

$xml .= "" . $val . "" . $key . ">";

} else {

$xml .= "" . $key . ">";

}

}

$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" . "
";

curl_close($ch);

return false;

}

}

}

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值