php实现微信支付之退款功能
发布时间:2021-05-24 03:23:21 所属栏目:编程 来源:网络整理
导读:网上的许多PHP微信付出接入教程都颇为伟大,且必要设置和引入较多的文件,本人通过清算后给出一个单文件版的,但愿可以给列位想接入微信付出的带来些许辅佐和小心意义。 直接运行该文件即可给指定的微名誉户退款。 必要留意的事项: 1.微信退款到零钱要求必
网上的许多PHP微信付出接入教程都颇为伟大,且必要设置和引入较多的文件,本人通过清算后给出一个单文件版的,但愿可以给列位想接入微信付出的带来些许辅佐和小心意义。 直接运行该文件即可给指定的微名誉户退款。 必要留意的事项:1.微信退款到零钱要求必传证书,必要到这里账户中心->账户配置->API安详->下载证书,然后修改代码中的证书路径 2.该文件需放到付出授权目次下,可以在微信付出商户平台->产物中心->开拓设置中配置。 3.如提醒署名错误可以通过微信付出署名验证器材举办验证:微信公家平台付出接口调试器材 4.错误码参照:参照地点 代码如下: 账户配置->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,$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,$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_POST,CURLOPT_POSTFIELDS,$postData);
curl_setopt($ch,30); //配置cURL应承执行的最长秒数
if (!empty($options)) {
curl_setopt_array($ch,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,CURLOPT_SSLKEY,getcwd().'/cert/apiclient_key.pem');
//第二种方法,两个文件合成一个.pem文件
// curl_setopt($ch,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 = " github下载地点 相干文章:以上就是本文的所有内容,但愿对各人的进修有所辅佐,也但愿各人多多支持编程之家。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读