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中define 与 const定义常量的区别详解)
- php安全攻防(phpstudy linux小皮面板怎么防cc攻击)
- linux如何安装php7.1.5环境(vmware linux系统安装最新的php7图解)
- php如何建立一个网站(PHP利用DWZ.CN服务生成短网址)
- php实战小实例(php实现推荐功能的简单实例)
- php怎么修改单独一行数据(PHP实现批量修改文件名的方法示例)
- php创建多个文件(PHP实现单文件、多个单文件、多文件上传函数的封装示例)
- thinkphp框架实例(ThinkPHP框架整合微信支付之JSAPI模式图文详解)
- php中的内置函数(php7下的filesize函数)
- phpdate函数使用方法(PHP中strtr与str_replace函数运行性能简单测试示例)
- php添加数据到mysql数据库(PHP通过代码连接XAMPP数据库及MySQL数据库方法)
- php守护进程(什么是PHP7中的孤儿进程与僵尸进程)
- php的底层分析(PHP反射原理与用法深入分析)
- php错误处理及调试(php报错502 bad gateway解决方法)
- php使用yield处理并发(Yii2.0框架模型多表关联查询示例)
- php支付系统(php实现的支付宝网页支付功能示例基于TP5框架)
- 菲律宾游学(菲律宾游学中介机构)
- 菲律宾美食(菲律宾美食排行榜前十名)
- 菲律宾特产(菲律宾特产最值得买回国)
- 越南特产(越南特产首饰)
- TVB负评王连续挑战警察角色《使徒行者3》中将饰演卧底(TVB负评王连续挑战警察角色使徒行者3中将饰演卧底)
- 《精英律师》剧照首曝光,实力演员飙戏,演绎律政职场百态(精英律师剧照首曝光)
热门推荐
- laravel 后台管理框架(laravel-admin 管理平台获取当前登陆用户信息的例子)
- idea调试怎么配置tomcat(如何提升Idea启动速度与Tomcat日志乱码问题)
- phpredis常用方法(PHP针对redis常用操作实例详解)
- docker 改变存储位置方式(修改Docker镜像默认存储位置的方法解决方法)
- python栈和队列(Python 实现数据结构中的栈队列)
- mysql 删除数据回收空间(浅谈为什么MySQL不建议delete删除数据)
- python交互模式下如何开始运行(python交互界面的退出方法)
- laravel api 调试(laravel 实现设置时区的简单方法)
- python中导入模块的命令(Python3 导入上级目录中的模块实例)
- dedecms循环栏目(dedecms 栏目列表分页链接优化)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9