各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

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

管理员 2023-09-05
PHP
170

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如何实现微信企业付款(代码实例)所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

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

相关推荐

扫码关注

qrcode

QQ交谈

回顶部