网上很多PHP微信支付接入教程比较复杂,需要配置和导入的文件比较多。整理好后给个单档版的。希望能给大家想要接入微信支付带来一些帮助和参考。直接运行这个文件,给指定的微信用户退款。注意事项:1.微信退款修改需要证书,需要到https://pay.weixin.qq.com账户中心->账户设置->API安全->下载证书,然后修改codeinCertificatepath2.该文件需要放在支付授权目录下,可在微信支付商户平台->产品中心->开发配置中设置。3、如果提示签名错误,可以通过微信支付签名验证工具进行验证:https://pay.weixin.qq.com/wik...4、错误代码参考:https://pay.weixin.qq.com/wik...代码如下:账户设置->API安全->下载证书,在119行和122行修改证书路径*2、错误代码参考:https://pay.weixin。qq.com/wiki/doc/api/jsapi.php?chapter=9_4*/header('Content-type:text/html;Charset=utf-8');$mchid='xxxxx';//微信支付商户IDPartnerID微信支付商户信息验证通过后通过邮件发送$appid='xxxxx';//微信支付应用对应公众号的APPID$apiKey='xxxxx';//https://pay.weixin.qq.com账户设置-安全设置-API安全-API密钥-设置API密码Key$orderNo='';//商户订单号(商户订单号和微信订单号任选其一,至少填写一个)$wxOrderNo='';//微信订单号(商户订单号和微信订单号任选其一,至少填写一个)$totalFee=0.01;//订单金额,单位:元$refundFee=0.01;//退款金额,单位:元$refundNo='refund_'.uniqid();//退款订单号(可随机生成)$wxPay=newWxpayService($mchid,$appid,$apiKey);$result=$wxPay->doRefund($totalFee,$refundFee,$refundNo,$wxOrderNo,$orderNo);if($result===true){echo'退款成功';exit();}echo'退款失败';classWxpayService{protected$mchid;受保护的$appid;受保护的$apiKey;公共$数据=空;公共函数__construct($mchid,$appid,$key){$this->mchid=$mchid;//https://pay.weixin.qq.com产品中心-开发配置-商户ID$this->appid=$appid;//微信支付应用对应公众号APPID$this->apiKey=$key;//https://pay.weixin.qq.com账户设置-安全设置-API安全-APIKey-设置APIKey}/***Refund*@paramfloat$totalFee订单金额元*@paramfloat$refundFee退款金额元*@paramstring$refundNo退款订单号*@paramstring$wxOrderNo微信订单号*@paramstring$orderNo商户订单号*@returnstring*/publicfunctiondoRefund($totalFee,$refundFee,$refundNo,$wxOrderNo='',$orderNo=''){$config=array('mch_id'=>$this->mchid,'appid'=>$this->appid,'key'=>$this->apiKey,);$统一=数组('appid'=>$config['appid'],'mch_id'=>$config['mch_id'],'nonce_str'=>self::createNonceStr(),'total_fee'=>intval($totalFee*100),//订单金额单位转为积分'refund_fee'=>intval($refundFee*100),//退款金额单位转为积分'sign_type'=>'MD5',//签名类型支持HMAC-SHA256和MD5,默认为MD5'transaction_id'=>$wxOrderNo,//微信订单号'out_trade_no'=>$orderNo,//商户订单号'out_refund_no'=>$refundNo,//商户退款订单号'refund_desc'=>'Productsoldout',//退款原因(可选));$unified['sign']=self::getSign($unified,$config['key']);$responseXml=$this->curlPost('https://api.mch.weixin.qq.com/secapi/pay/refund',self::arrayToXml($unified));$unifiedOrder=simplexml_load_string($responseXml,'SimpleXMLElement',LIBXML_NOCDATA);if($unifiedOrder===false){die('解析xml错误');}if($unifiedOrder->return_code!='SUCCESS'){die($unifiedOrder->return_msg);}if($unifiedOrder->result_code!='SUCCESS'){die($unifiedOrder->err_code);}返回真;}publicstaticfunctioncurlGet($url='',$options=array()){$ch=curl_init($url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_TIMEOUT,30);如果(!empty($options)){curl_setopt_array($ch,$options);}//https请求验证书和主机curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);$data=curl_exec($ch);curl_close($ch);返回$数据;}publicfunctioncurlPost($url='',$postData='',$options=array()){if(is_array($postData)){$postData=http_build_query($postData);}$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch,CURLOPT_POSTFIELDS,$postData);curl_setopt($ch,CURLOPT_TIMEOUT,30);//设置cURL允许执行的最大秒数if(!empty($options)){curl_setopt_array($ch,$options);}//https请求不验证证书和主机curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);//第一种方法,cert和key分别属于两个.pem文件//默认格式为PEM,可以注释curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/cert/apiclient_cert.pem');//默认格式为PEM,可以注释curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/cert/apiclient_key.pem');//第二种方式,两个文件合并成一个.pem文件//curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem');$data=curl_exec($ch);卷曲_close($ch);返回$数据;}publicstaticfunctioncreateNonceStr($length=16){$chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';$str='';对于($i=0;$i<$length;$i++){$str.=substr($chars,mt_rand(0,strlen($chars)-1),1);}返回$str;}publicstaticfunctionarrayToXml($arr){$xml="
