php微信支付流程(PHP实现微信退款的方法示例)
类别:编程学习 浏览量:2763
时间:2022-04-01 00:28:50 php微信支付流程
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创建类并调用的实例方法)
- php连接oracle(PHP远程连接oracle数据库操作实现方法图文详解)
- php如何定时执行某项(php解决crontab定时任务不能写入文件问题的方法分析)
- php把当前网页生成pdf(php转换上传word文件为PDF的方法基于COM组件)
- phpstudy的默认网站根目录是什么(phpstudy v8.0创建本地站点域名教程图文)
- mac版本php环境搭建(在Mac OS X中配置Apache+PHP+MySQL运行环境的详细步骤)
- phptime函数与时区设置(php常用日期时间函数实例小结)
- php使用面向对象如何写好代码(PHP面向对象程序设计模拟一般面向对象语言中的方法重载overload示例)
- thinkphp实战教程之博客技术学习(python3编写ThinkPHP命令执行Getshell的方法)
- phpstudymysql数据库启动不了(phpstudy mysql启动不了的解决方法)
- thinkphp5单例原理(Thinkphp5框架简单实现钩子Hook行为的方法示例)
- php语法分析方法(PHP中localeconv函数的用法)
- phplaravel一般开发什么项目(laravel 去掉index.php伪静态的操作方法)
- phpstudy的mysql无法启动(Windows系统下解决PhPStudy MySQL启动失败问题)
- php对象模型(PHP数据对象映射模式实例分析)
- php项目开发实例(php项目中类的自动加载实例讲解)
- 律界衣品最好,时尚圈学识数高,41岁的Amal堪称现实版的傲骨贤妻(时尚圈学识数高)
- 刘智泰确认出演《Good Wife》 担纲男一号(刘智泰确认出演Good)
- 《傲骨之战》剧终 律政女魔头Diane,为什么是大女主天花板(傲骨之战剧终律政女魔头Diane)
- 汉族(汉族的祖先是谁)
- 中国有几个名族(中国有几个民族没列入56个民族)
- 数学语文题目(语文的数学题)
热门推荐
- vue router用法(如何在Vue 3中扩展Vue Router链接详解)
- tftp服务器怎么设置(TFTP服务器是什么意思?)
- Request获取URL的各种信息
- HttpWebResponse.StatusCode请求状态代码
- mysql实验总结分析(MySQL查询截取的深入分析)
- 阿里云服务器安全组设置规则(阿里云主机不能用IP访问网站的解决方法配置安全组规则搞定)
- css简单网页布局代码(纯CSS制作自适应分页条附源码下载)
- 简述css3动画与过渡效果(CSS3制作翻转效果_动力节点Java学院整理)
- SQL中的with as的使用
- nginx 一个域名对应多个项目(nginx前后端同域名配置的方法实现)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9