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类中static与self的使用区别浅析)
- phpstudy最佳配置(phpstudy如何开启openSSL?)
- apache2.4支持php5.5吗(WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置)
- php7用什么替代mysql(mysqli扩展无法在PHP7下升级问题的解决)
- php递归ajax的交互模型(PHP使用反向Ajax技术实现在线客服系统详解)
- php博客开发短信原理(PHP如何实现阿里云短信sdk灵活应用在项目中的方法)
- dedecms标签调用原理(DEDECMS安全设置 执行php脚本限制设置方法apache+nginx)
- redis在php中的使用(PHP+Redis开发的书签案例实战详解)
- php wamp 环境搭建(wamp服务器访问php非常缓慢的解决过程)
- php 与asp对比(asp.net和php的区别点总结)
- php验证码图解(php/JS实现的生成随机密码验证码功能示例)
- php cgi是什么意思(PHP7内核CGI与FastCGI详解)
- php开启curl(解决PHP使用CURL发送GET请求时传递参数的问题)
- php数组取值方法(php给数组赋值的实例方法)
- php列表怎么用(PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能)
- thinkphp实战教程之博客技术学习(python3编写ThinkPHP命令执行Getshell的方法)
- 冰岛旅游攻略(冰岛旅游攻略及花费)
- 为什么现在年轻人越来越喜欢买衣服(为什么现在年轻人越来越喜欢买衣服穿)
- 怎么做好SEO(怎么做好seo内容优化)
- 冬季钓鱼子线用 长 还是 短(冬季钓鱼子线用)
- 鱼竿 夏钓短,冬钓长 ,一定是这样 认清优缺点在选竿(鱼竿夏钓短冬钓长)
- 鲢鳙钓底还是钓浮 流水的水域应怎样做钓(鲢鳙钓底还是钓浮)
热门推荐
- C#中app.config配置文件
- python实现linux服务(Python实现Linux监控的方法)
- docker容器管理技巧(Docker容器编排实现过程解析)
- dedecms获取子目录(详解dedecms利用[field:arcurl/]无法获取文章路径的解决方法)
- 如何把阿里云盘加入到快捷操作(阿里云如何挂载数据盘?阿里云挂载数据盘一键脚本)
- mysql怎么设置存储记录(MySQL 的一行记录是怎么存储的?)
- dedecms5.7后台内链如何制作(DEDECMS教程之loop循环标签的使用详解)
- linux安装deb包命令(Linux deb包解压、修改等操作方法代码示例)
- apache 代理服务器返回403(Apache中301重定向的配置代码)
- pythonimage库(Python/Django后端使用PIL Image生成头像缩略图)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9