PHP实现小程序微信支付v2版本退款以及对回调数据的解密

PS:本篇文章主要是对PHP实现小程序退款以及退款回调数据解密的流程做大概解释,代码请各位按照自身需求进行修改
小程序js代码:

  refundOrder(){
   
    var refund = this 
    wx.request({
   
      url: 'http://127.0.0.1:2910/wxPayV2/refundOrder/refundOrderAction.php', //此处写你的PHP文件地址
      method:'POST',
      header:{
   
        'content-type':'application/x-www-form-urlencoded'
      },
      data:{
   
        'out_trade_no':'商户订单号',
        'refund_fee':'1' //退款金额,单位为分
      },
      success(res){
   
        console.log(res)
      }
    })
  },

PHP微信v2退款类文件
refundOrder.php

<?php
require_once dirname(__FILE__,3).'/config/appConfig.php';
require_once dirname(__FILE__,2).'/createOrder/createOrder.php';
class refundOrder
{
   
    /**
     * 获取相关基本配置
     */
    public function __construct(){
   
        $this -> APIv2 = APIv2;
        $this -> appid = appid;
        $this -> mch_id = mch_id;
    }

    /**
     * 生成32位随机字符串
     * @return false|string
     */
    public function nonce_str(){
   
        $getData = new createOrder;
        return $getData -> nonce_str();
    }

    /**
     * 生成商户退款单号
     * @return string
     */
    public function out_refund_no(): string
    {
   
        $getData = new createOrder;
        $data = $getData -> out_trade_no();
        return 'T'.$data;
    }

    /**
     * 返回参与签名的数据主体
     * @param $nonce_str :32位随机字符串
     * @param $transaction_id :微信支付订单号
     * @param $out_refund_no :商户退款单号
     * @param $total_fee :订单总金额
     * @param $refund_fee :退款金额
     * @return array
     */
    public function signBody($nonce_str,$transaction_id,$out_refund_no,$total_fee,$refund_fee): array
    {
   
        $data = array(
            'appid' => $this -> appid,
            'mch_id' => $this -> mch_id,
            'nonce_str' => $nonce_str,
            'sign_type' => 'MD5',
            'transaction_id' => $transaction_id,
            'out_refund_no' => $out_refund_no,
            'total_fee' => $total_fee,
            'refund_fee' => $refund_fee,
        );
        ksort($data);
        return $data;
    }

    /**
     * 将参与签名的数据转换字符串并连接APIv2
     * @param $data :参与签名的数据主体(array)
     * @return string
     */
    public function disposeSignBody($data): string
    {
   
        $signBody = '';
        foreach ($data as $key => $val){
   
            $signBody .= "$key=$val&";
        }
        $signBody .= "key=$this->APIv2";
        return $signBody;
    }

    /**
     * 返回签名值
     * @param $signBody :经过处理后的待签名数据
     * @return string
     */
    public function sign($signBody): string
    {
   
        return strtoupper(MD5($signBody));
    }

    /**
     * 生成访问微信退款接口的参数主体
     * @param $sign :签名值
     * @param $signBody :参与签名的数据主体
     * @return string
     */
    public function requestBody($sign,$signBody): string
    {
   
        $signArray = array(
            'sign' => $sign
        );
        $requestArray = array_merge($signArray
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信退款通知中,微信会将通知以POST请求方式发送到您在商户平台设置的回调URL上。接收到退款通知后,您需要使用PHP代码解析和处理通知数据,并对重要数据进行解密。 以下是一个使用PHP处理微信退款通知并解密重要数据的示例代码: ```php <?php // 获取POST请求的原始数据 $xmlData = file_get_contents("php://input"); // 将XML数据转换为关联数组 $data = simplexml_load_string($xmlData, 'SimpleXMLElement', LIBXML_NOCDATA); $data = json_decode(json_encode($data), true); // 解密加密的重要数据 $encryptedData = $data['req_info']; // 加密的数据 $apiKey = '商户API密钥'; // 商户API密钥,需要替换为实际的密钥 // 使用AES-256-ECB算法进行解密 $decryptedData = openssl_decrypt(base64_decode($encryptedData), 'AES-256-ECB', md5($apiKey), OPENSSL_RAW_DATA); // 将解密后的数据转换为关联数组 $refundData = simplexml_load_string($decryptedData, 'SimpleXMLElement', LIBXML_NOCDATA); $refundData = json_decode(json_encode($refundData), true); // 在这里可以根据需求处理退款通知数据,比如更新订单状态、记录日志等 // 返回成功响应给微信服务器 echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>'; ?> ``` 请注意将代码中的`商户API密钥`替换为您自己的商户API密钥。此外,您还需要针对实际的业务需求进行相应的处理,比如更新订单状态、记录日志等。 重要提示:确保您的服务器使用HTTPS协议来接收和处理微信退款通知,以确保数据的安全性,同时也是微信支付服务的要求。 希望以上代码能帮助您解决问题。如果有任何进一步的疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值