php如何实现微信企业付款(代码实例)

php如何实现微信企业付款(代码实例)

内容导读

收集整理的这篇技术教程文章主要介绍了php如何实现微信企业付款(代码实例),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4765字,纯文字阅读大概需要7分钟

内容图文

本篇文章给大家带来的内容是关于php如何实现微信企业付款(代码实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一、封装微信企业付款类WeiXinPayToUser,如下图代码所示:

class WeixinPayToUser{

/**

 * API 参数

 * @var array

 * 'mch_appid'



 # 公众号APPID

 * 'mchid'





 # 商户号

 * 'device_info'


 # 设备号

 * 'nonce_str'



 # 随机字符串

 * 'partner_trade_no'
# 商户订单号

 * 'openid'





# 收款用户openid

 * 'check_name'



# 校验用户姓名选项 针对实名认证的用户

 * 're_user_name'


# 收款用户姓名

 * 'amount'





# 付款金额

 * 'desc'






# 企业付款描述信息

 * 'spbill_create_ip'
# Ip地址

 * 'sign'






# 签名

 */

public $parameters = [];

public $SSLROOTCA_PATH='';

public $SSLCERT_PATH='';

public $SSLKEY_PATH='';

public $appid='';

public $secret='';

public $mchid='';

public $key='';//商户密钥

public function __construct()

{



$this->url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';



$this->curl_timeout = 10;



$this->SSLROOTCA_PATH=dirname(__FILE__).'/weixin/cert/rootca.pem';



$this->SSLCERT_PATH=dirname(__FILE__).'/weixin/cert/apiclient_cert.pem';



$this->SSLKEY_PATH=dirname(__FILE__).'/weixin/cert/apiclient_key.pem';

}

public function setParameter($key,$value){



$this->parameters[$key]=$value;

}

function arrayToXml($arr,$dom=0,$item=0){



if (!$dom){





$dom = new DOMDocument("1.0");



}



if(!$item){





$item = $dom->createElement("xml");





$dom->appendChild($item);



}



foreach ($arr as $key=>$val){





$itemx = $dom->createElement(is_string($key)?$key:"item");





$item->appendChild($itemx);





if (!is_array($val)){







$text = $dom->createTextNode($val);







$itemx->appendChild($text);





}else {







$this->arrayToXml($val,$dom,$itemx);





}



}



$dom->encoding = 'UTF-8'; // insert proper



return $dom->saveXML();

}

public function getSign($paramArr){//print_r($paramArr);



ksort($paramArr);



$paramStr = http_build_query($paramArr);



$paramStr=urldecode($paramStr);



$param_temp=$paramStr.'&key='.$this->key;//echo $param_temp.'<br>';



$signValue=strtoupper(md5($param_temp));//echo $signValue.'<br>';



return $signValue;

}

/**

 * 生成请求xml数据

 * @return string

 */

public function createXml()

{



$this->parameters['mch_appid'] = $this->appid;



$this->parameters['mchid']

 = $this->mchid;


 // $this->parameters['nonce_str'] = md5(time());



$this->parameters['nonce_str'] = 'dddfff';



$this->parameters['sign']


= $this->getSign($this->parameters);



$a= $this->arrayToXml($this->parameters);



//echo $a;



return $a;

}

public function pay(){



$xml=$this->createXml();



$url=$this->url;



return $this->postXmlSSLCurl($xml,$url,$second=30);

}

/**

 *

 作用:使用证书,以post方式提交xml到对应的接口url

 */

function postXmlSSLCurl($xml,$url,$second=30)

{



$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); //设置证书 //curl_setopt($ch,CURLOPT_CAINFO, $this->SSLROOTCA_PATH); //使用证书:cert 与 key 分别属于两个.pem文件 //默认格式为PEM,可以注释 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT, $this->SSLCERT_PATH); //默认格式为PEM,可以注释 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY, $this->SSLKEY_PATH); //post提交方式 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>"; echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>"; curl_close($ch); return false; } }}?>

二、调用WeiXinPayToUser,如下图所示:

 /**

 * 企业付款测试

 */

public function payToUser()

{




 $mchPay = new WeiXinPayToUser();



// 用户openid



$mchPay->setParameter('openid', 'oy2lbszskklaslEKThrzqEziKEBzqU');



// 商户订单号



$mchPay->setParameter('partner_trade_no', 'test-'.time());



// 校验用户姓名选项



$mchPay->setParameter('check_name', 'NO_CHECK');



// 企业付款金额
单位为分



$mchPay->setParameter('amount', 100);



// 企业付款描述信息



$mchPay->setParameter('desc', '开发测试');



// 调用接口的机器IP地址
自定义



$mchPay->setParameter('spbill_create_ip', '127.0.0.1'); # getClientIp()



// 收款用户姓名



// $mchPay->setParameter('re_user_name', 'Max wen');



// 设备信息



// $mchPay->setParameter('device_info', 'dev_server');



$response = $mchPay->postXmlSSL();



if( !empty($response) ) {





$data = simplexml_load_string($response, null, LIBXML_NOCDATA);





echo json_encode($data);



}else{





echo json_encode( array('return_code' => 'FAIL', 'return_msg' => 'transfers_接口出错', 'return_ext' => array()) );



}

}}

相关推荐:

微信开发企业付款 PHP代码实现

php中如何实现微信企业向用户付款的代码实例

以上就是php如何实现微信企业付款(代码实例)的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的php如何实现微信企业付款(代码实例)全部内容,希望文章能够帮你解决php如何实现微信企业付款(代码实例)所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com