PHP后台,微信小程序退款流程

董哥教你一天学习后台是JAVA 的 微信小程序退款 小程序微信退款,是一种可以将小程序体验完成特别好的一种技术。 今天我就用了一天时间将Java 版本 微信小程序退款功能完成 首先需求拿到后, 先查看资料 第一步:小程序退款文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_4 申请退款 应用 阅读详情

小程序的退款流程都比较清晰,如果做过支付的,上手比较容易,支付在此就不多说,现在说一下在退款流程中遇到的坑

证书保存路径问题,按网上流程,把证书保存在根目录的cert中,在curl中获取,都显示58错误,找不到证书,后来经过研究,把证书放在了程序文件夹public中,新建cert保存,就可以正常访问

//使用的啊里云宝塔,存放证书路径,放在public中,新建cert
$cert = '/cert/cdzw_apiclient_cert.pem';
$key = '/cert/cdzw_apiclient_key.pem';

//默认格式为PEM,可以注释,使用getcwd()方法,拼接证书的绝对路径
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLCERT,getcwd().$cert);

//默认格式为PEM,可以注释,使用getcwd()方法,拼接证书的绝对路径
curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLKEY,getcwd().$key);

详细代码如下

 //网页端向微信平台提交退款申请
    public function submitDrawBack(){
        //通过订单ID,获取订单信息
        $id = $this->request->param('id');
        $data = CdzwOrderModel::where('id',$id)->find();
        //通过微信api进行退款流程
        $nonce_str = $this->nonce_str();//随机32位字符串
        $out_refund_no = $this->getOrderNum();//随机不重复退款单号
        $total_fee = $data['total'] * 100;//总金额,单位:分
        $refund_fee = $data['recTotal'] * 100;//退款金额,单位:分
        $appid = constant("APPID");//小程序appid
        $mch_id = constant("MCHID");//小程序商户号
        $parma = array(
            'appid'=> $appid,
            'mch_id'=> $mch_id,
            'nonce_str'=> $nonce_str,
            'out_trade_no'=> $data['trade_no'],//小程序自定义订单号,支付时后台生成
            'out_refund_no'=> $out_refund_no,
            'refund_fee'=> $refund_fee,
            'total_fee'=> $total_fee,
            'transaction_id' => $data['pay_no'],//小程序平台订单号,微信平台生成
        );
        $KEY = constant("KEY");//小程序支付秘钥
        $parma['sign']  = $this->MakeSign($parma, $KEY);//签名

        $post_xml = $this->arrayToXml($parma);//把参数转化成xml格式
        //向微信平台api发送退款参数
        $xmlresult = $this->postXmlSSLCurl($post_xml,'https://api.mch.weixin.qq.com/secapi/pay/refund');
        //解析返回的参数
        $array = $this->xml2array($xmlresult);
        //两个success表示退款成功,无需使用回调,在此进行逻辑处理即可
        if ($array['RETURN_CODE'] == 'SUCCESS' && $array['RESULT_CODE'] == 'SUCCESS') {
            CdzwOrderModel::where('id',$id)->update(['status'=>7,'dbCompleteTime'=>date("Y-m-d H:i")]);
                $status = 1;
                $message = '退款成功';

        }else{
            $status = 0;
            $message = '退款失败';
        }
        return ['status' => $status, 'message' => $message];

//        return $array;
    }
    //数组转字符串方法

    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;
    }
 //获取xml里面数据,转换成array
    private function xml2array($xml)
    {
        $p = xml_parser_create();
        xml_parse_into_struct($p, $xml, $vals, $index);
        xml_parser_free($p);
        $data = [];

        foreach ($index as $key => $value) {
            if ($key == 'xml' || $key == 'XML') continue;
            $tag = $vals[$value[0]]['tag'];
            $value = $vals[$value[0]]['value'];
            $data[$tag] = $value;
        }
        return $data;
    }
    //需要使用证书的请求

    function postXmlSSLCurl($xml,$url,$second=30)
    {
        //使用的啊里云宝塔,存放证书路径,放在public中,新建cert
        $cert = '/cert/cdzw_apiclient_cert.pem';
        $key = '/cert/cdzw_apiclient_key.pem';

        $ch = curl_init();
        //超时时间
        curl_setopt($ch, CURLOPT_TIMEOUT, $second);
        //这里设置代理,如果有的话
        //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
        //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        //设置header
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        //要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        //设置证书
        //使用证书:cert 与 key 分别属于两个.pem文件
        //默认格式为PEM,可以注释,使用getcwd()方法,拼接证书的绝对路径
        curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
        curl_setopt($ch, CURLOPT_SSLCERT,getcwd().$cert);

        //默认格式为PEM,可以注释,使用getcwd()方法,拼接证书的绝对路径
        curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
        curl_setopt($ch, CURLOPT_SSLKEY,getcwd().$key);

        //post提交方式
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);

        $data = curl_exec($ch);
//        p($data);die;
        //返回结果
        if ($data) {
            curl_close($ch);
            return $data;
        } else {
            $error = curl_errno($ch);
            echo "curl出错,错误码:$error" . "<br>";
            curl_close($ch);
            return false;
        }
    }

多年程序开发,2年开发微信小程序经验,已有数个稳定上线运营项目,PHP后台+小程序 全栈开发

兼职接单,欢迎咨询 微信号:x1880161

微信小程序:微信支付和退款 微信支付的前期准备: 小程序的appId和密钥(小程序配置界面) 商户号和api密钥(商家后台自己设置) 整理支付的逻辑: 附:官方微信统一下单传送门API 在微信小程序端调用支付前,先组装支付的金额给后台发送请求,后台需要调用微信API统一下单 微信统一下单成功后,微信返回支付的5个参数 拿到5个参数,方可在小程序端调用wx.requestPayment(),在此... 阅读详情

相关推荐

php如何实现微信小程序支付及退款

微信小程序支付的主要逻辑集中在后端,前端只需携带支付所需的数据请求后端接口然后根据返回结果做相应成功失败处理即可。本篇文章后端使用的是php,侧重于整个支付的流程和一些细节方面的东西。所以使用其他后端语言的朋友有需要也是可以看一下的。很多时候开发的需求和相应问题的解决真的要跳出语言语法层面,去从系统和流程的角度考虑。 一. 支付 支付主要分为几个步骤: 前端携带支付需要的数据(商品id...

Dove言和 941

php微信小程序退款

php微信小程序退款

qq_56687451的博客 848

微信小程序 - 实现Java微信支付退款功能以及退款流程,微信小程序前端+java后端完整示例源码,微信小程序退款功能详解,小程序订单申请退款和退款回调方法、查询退款等(新版微信支付,详细示例代码)

微信小程序开发-微信支付退款功能以及退款回调方法,微信支付退款API详解,微信小程序支付V3(支付、退款)Java实现微信小程序开发 小程序支付开发-小程序退款功能,微信小程序小程序和公众号 退款功能教程(含申请退款和退款回调,退款回调地址在商户后台配置或者代码自定义)最新版微信小程序支付,退款问题,小程序支付和退款功能详解,小程序申请退款,小程序处理退款,微信小程序支付与退款java,微信小程序退款及回调,JAVA实现微信小程序支付退款功能,退款api调用报错,如何解决退款申请无响应,如何用实现小程序订单

🏆 前端领域优质创作者 4159

记录一下PHP使用微信小程序V3支付及申请退款

请详细查看文档中小程序支付接入前准备(https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml)官方文档:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_0.shtml。小程序支付到这基本就算完成了,中途发生问题可以百度解决,实际请按自己的需求进行代码完善。4.支付成功后通过第二步设置的回调地址进行支付成功后订单逻辑支付。小程序端提交的订单就不做示例了。

T_Hong的博客 1586

家政上门预约小程序源码实测:功能拆解、部署避坑与二次开发

小程序开发已成为本地生活服务数字化的重要入口,而家政服务线上化则因其高频、刚需的特性,成为预约类小程序的典型应用场景。这类系统不仅需要实现服务展示与下单支付,更要处理好时段排班、订单状态流转、师傅分成结算等复杂业务逻辑。对于缺乏从零开发能力的小团队而言,选择一套结构清晰、可二次开发的源码,是快速上线并验证商业模式的务实路径。文章从一套可运行的家政上门预约小程序源码出发,逐一拆解用户端预约流程、后台订单管理、支付退款机制及前后端技术架构,并结合实际部署中的环境配置、接口联调与避坑记录,最后给出营销裂变、多门店

weixin_36364707的博客 352

基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作

主要介绍了基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

小程序支付 PHP(支付、手机号解密、获取Token、支付异步通知、退款、订单查询)

返回值 看官方文档,每个返回值都不一样,自行判断,如 openid 返回[alipay_system_oauth_token_response] 退款返回[alipay_trade_create_response]需要先到开发平台添加进入小程序进行产品绑定,在去商家平台设置。返回结果 array 由开发者自行判断(可以拿 5.1 版本进行对比)订单查询、退款、参数设置可以设置其他,具体看文档。使用密钥进行签名解密,没有使用证书签名解密。微信支付未使用 APIv3 接口规则。金额单位分 100=1 元。

qq_28466243的博客 2400

C语言--第三大的数

第三大的数 给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数. 示例1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例2: 输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2 . ...

loreal8的博客 2132

PHP 微信小程序微信V2下单与退款

小程序支付这个比较简单,在此就不多说,直接看代码即可,现在说一下在退款流程中遇到的坑,证书保存路径问题,按网上流程,把证书保存在根目录的cert中,在curl中获取,都提示错误,找不到证书,后来经过研究,把证书放在了程序文件夹extend中,就可以正常访问.

wyh757787026的博客 649

icem二维非结构网格划分_ICEM CFD网格装配

正文共:718字7图 预计阅读时间:2分钟1 前言 对于一些大型的复杂的网格划分,可以将整个模型切分成多个子模型(二维几何用线切分,三维模型用面切分),然后对各个模型单独划分网格,最终装配在一起。这和机械设计的零件设计和装配设计有点相似,这个功...

weixin_39908758的博客 1625

零中频接收机实战:DC Offset的5种常见解决方案与调试技巧

本文针对零中频接收机中DC Offset这一核心挑战,深入剖析了其产生机理与对信号解调的严重影响。文章从实战角度出发,系统性地介绍了五种解决方案,包括硬件预防、数字域校正、I/Q不平衡联合校正等,并分享了关键的实验室调试与产线测试技巧,旨在帮助射频工程师有效提升接收机性能。

weixin_29234509的博客 399

PHP 微信小程序退费

流程非常简单 没有什么坑 基本官方文档写的非常清楚了 &lt;?php require_once "wxxcxpay.conf.php"; class wxxcxrefundExt { //退费 public static function wxrefundapi($outtradeno,$totalfee,$refundfee){ //通过微信api进行退款流程...

php_lzr的博客 454

Google OR-Tools的CP-SAT求解器,为什么比传统线性规划更适合你的组合优化问题?

本文深入解析Google OR-Tools中的CP-SAT求解器为何比传统线性规划更适合解决组合优化问题。CP-SAT融合约束规划与可满足性理论,原生支持复杂逻辑约束和离散决策,在物流、生产调度等领域展现出显著优势。通过技术对比和实战案例,展示CP-SAT在处理高组合复杂度问题时的卓越性能。

weixin_28700593的博客 926

微信小程序的支付和退款流程

微信小程序的支付和退款流程

m0_55258023的博客 2420

PCL 改进快速欧式聚类【2025最新版】

在FEC: Fast Euclidean Clustering for Point Cloud Segmentation一文的基础上对算法进行改进。博客长期更新,本文最近更新时间为:2025年9月16日。

点云侠的博客 2570

Autodesk Revit软件二次开发:Revit二次开发中的插件设计与实现

在 Revit 中,族是构成建筑模型的基本单元,可以是门窗、家具等。通过自定义族,可以创建符合特定需求的建筑构件。参数化设计允许族的尺寸、形状等属性根据参数变化而变化。使用 Revit API 创建自定义族涉及多个步骤,包括定义族类型、设置参数、创建几何形状等。// 创建族文档// 定义参数Parameter param = family.FamilyManager.AddParameter("Width", BuiltInParameterGroup.PG_LENGTH, "宽度");

kkchenjj的博客 2230

微信小程序支付及退款流程详解

近期在做微信小程序时,涉及到了小程序的支付和退款流程,所以也大概的将这方面的东西看了一个遍,就在这篇博客里总结一下。 首先说明一下,微信小程序支付的主要逻辑集中在后端,前端只需携带支付所需的数据请求后端接口然后根据返回结果做相应成功失败处理即可。我在后端使用的是php,当然在这篇博客里我不打算贴一堆代码来说明支付的具体实现,而主要会侧重于整个支付的流程和一些细节方面的东西。所以使用其他后端语言的朋友有需要也是可以看一下的。很多时候开发的需求和相应问题的解决真的要跳出语言语法层面,去从系统和流程的角度考虑。好

今天鸭鸭不想出去玩 4983

麻雀搜索算法(SSA)详解:从鸟群智能到优化实践

麻雀搜索算法(SSA)是一种新型群智能优化算法,模拟麻雀群体的觅食行为和反捕食机制。该算法将优化问题转化为麻雀群体对食物源的搜索过程,通过发现者、加入者和警戒者的角色分工实现高效优化。SSA具有原理新颖、参数合理、收敛快速等特点,在函数优化、工程设计和机器学习等领域展现出良好应用前景。算法通过数学模型模拟麻雀的觅食策略,包括发现者全局探索、加入者局部开发和警戒者危险预警机制,有效平衡了全局搜索与局部开发能力。SSA相比传统优化算法具有更好的收敛性和优化效果。

qq_42212808的博客 1072

PHP实现微信支付及退款流程实例

PHP实现微信支付及退款实例

北方的猿 3495

华为OD机试真题 新系统 2026-04-26 Python&JS 实现【项目模块依赖构建顺序规划】

某公司正在开发一个大型软件系统,系统包含 N 个模块,每个模块之间存在构建依赖关系。例如,模块 A 可能依赖于模块 B,这意味着必须先构建模块 B,才能构建模块 A。 请根据依赖关系,输出所有可能的模块构建顺序(按照构建顺序排列模块名称),要求:

MISAYAONE的博客 405

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

微信小程序支付 退款 订单查询 退款查询

基于thinkphp5框架 支付 /** * 预支付请求接口(POST) * @param string $openid openid * @param string $body 商品简单描述 * @param string $order_sn 订单编号 * @param string $total_fee 金额 * @return json的数据 */ public function prepay() {

栈外手记|2018 年起深耕后端开发。跳出代码栈,分享技术、项目踩坑与行业思考,看见技术之外更多可能。 3984

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

php做一个微信退款,php如何实现微信小程序支付及退款

微信小程序支付的主要逻辑集中在后端,前端只需携带支付所需的数据请求后端接口然后根据返回结果做相应成功失败处理即可。支付步骤前端请求支付后端请求微信服务器后端接受微信服务器返回数据前端发起支付微信的大概支付流程就是这样。以下是PHP语法的微信支付类,可以比照上面的步骤介绍,加深理解。在需要支付时,直接传入参数实例化此类再调用类的 pay 方法即可。需要注意的是,在接收到微信服务器的回调通知后,根据通...

weixin_32687875的博客 537

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

微信小程序实现退款

QQ技术交流群173683866 526474645 欢迎加入交流讨论,打广告的一律飞机票 退款php代码 <?php // +---------------------------------------------------------------------- // | Tplay [ WE ONLY DO WHAT IS NECESSARY ] // +----------...

a_靖的博客 9913

SpringBoot(JAVA)整合小程序支付和退款功能详解

SpringBoot(java)整合微信小程序SDK支付和退款,小程序调用后端预支付接口,接口调用成功返回给小程序支付凭证id,小程序拿到支付凭证调用微信后台支付接口,小程序支付成功后,微信后台执行支付回调将支付订单信息返回(预支付调用微信后台是需要传入支付成功后自己本地的回调接口地址)

weixin_46204877的博客 4019
上一篇: PHP-小程序发布订阅信息
下一篇: php数组对象,对某一个字段排序
bilichen006
博客等级 码龄12年 93粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值