php微信企业支付到微信零钱-api开发

一个简单的微信支付类,实现了从微信财付通里面转账到个人微信的功能。本类适合直接转到零钱的操作,扩展后可以应用于转到银行卡等途径。

须知:1.到微信支付账户中开启企业付款功能;2.财付通有足够金额。

<?php
/** *
 * Created by Brisk Ver
 * User: 1076963452@qq.com
 * Datetime: 2019/3/2 16:36
 */

//企业付款到微信零钱
class WxPayToUser
{
    protected $appid = '';//商户账号appid
    protected $mchid = '';//商户号
    protected $mchkey = '';//支付密钥
    protected $apiclient_cert = '';//证书的位置绝对路径
    protected $apiclient_key = '';//证书的位置绝对路径

    public function __construct($config)
    {
        $this->appid = $config['appid'];
        $this->mchid = $config['mchid'];
        $this->mchkey = $config['mchkey'];
        $this->apiclient_cert = $config['sslsert_path'];
        $this->apiclient_key = $config['sslkey_path'];
    }

    //随机字符串
    private function createNoncestr($length =32)
    {
        $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
        $str ="";
        for ( $i = 0; $i < $length; $i++ ){
            $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);
        }
        return $str;
    }

    private function arraytoxml($data)
    {
        $str='<xml>';
        foreach($data as $k=>$v) {
            $str.='<'.$k.'>'.$v.'</'.$k.'>';
        }
        $str.='</xml>';
        return $str;
    }

    private function xmltoarray($xml)
    {
        //禁止引用外部xml实体
        libxml_disable_entity_loader(true);
        return json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)),true);
    }

    //发送请求
    private function curl($param="",$url)
    {
        $postUrl = $url;
        $curlPost = $param;
        $ch = curl_init();                                      //初始化curl
        curl_setopt($ch, CURLOPT_URL,$postUrl);                 //抓取指定网页
        curl_setopt($ch, CURLOPT_HEADER, 0);                    //设置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);            //要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_POST, 1);                      //post提交方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);           // 增加 HTTP Header(头)里的字段
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);        // 终止从服务端进行验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch,CURLOPT_SSLCERT,$this->apiclient_cert);
        curl_setopt($ch,CURLOPT_SSLKEY,$this->apiclient_key);
        $data = curl_exec($ch);                                 //运行curl
        curl_close($ch);
        return $data;
    }

    /*
   开始执行操作
    */
    public function run($order)
    {
        $data = array(
            'mch_appid'=>strval($this->appid),//商户账号appid(公众号、小程序、移动应用的APPID都是不一样的哦)
            'mchid'=>strval($this->mchid),//商户号
            'nonce_str'=>strval($this->createNoncestr()),//随机字符串
            'partner_trade_no'=> strval($order['partner_trade_no']),//商户订单号
            'openid'=> strval($order['openid']),//用户openid
            'check_name'=>$order['check_name'],////NO_CHECK:不校验真实姓名 ,FORCE_CHECK:强校验真实姓名
            're_user_name'=> $order['re_user_name'],//收款用户姓名
            'amount'=>strval($order['amount']),//金额
            'desc'=>$order['desc'],//企业付款描述信息
            'spbill_create_ip'=> strval($order['spbill_create_ip']),//Ip地址
        );
        ksort($data);//按ASCII码排序数组
        $str = '';
        foreach($data as $k=>$v) {
            $str .= $k.'='.$v.'&';
        }
        $str .=  'key='.$this->mchkey;//拼接支付商户的秘钥
        $sign = strtoupper(md5($str));//转换为大写
        $data['sign'] = $sign;
        $xml = $this->arraytoxml($data);
        $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; //调用接口
        $res = $this->curl($xml,$url);
        return $this->xmltoarray($res);//以数组方式返回,根据返回实现后期需要的逻辑业务
    }
}


微信截图_20210417225153.png

评论/留言