您好,欢迎访问本站博客!联系QQ:1343013953
  • 四象限时间管理法则:①重要且紧急的事;②重要但不紧急的事;③不重要但紧急的事;④不重要且不紧急的事

thinkphp3.2+微信使用企业付款到用户零钱

微信公众号开发 wujinhua 2018-10-31 2784 次浏览 0个评论
网站分享代码

登录微信商户平台开通企业微信付款到用户功能。

前置条件(1.公众号申请时间超过90天,2.微信支付有连续30天的流水,30天是连续的,中断一次得重新来。)

1.下载证书。

2.把证书上传至程序文件里面,至于放哪里都可以在使用的时候可以访问就可以,不建议放根目录下面

3.构建参数

$url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; 
    $params["mch_appid"] = 'wx0f68a1ce8xxxxx';   //公众账号appid 
    $params["mchid"] = '1508996531';   //商户号 微信支付平台账号 
    $params["nonce_str"] = $nonce_str;   //随机字符串
    $params["partner_trade_no"] = mt_rand(10000000, 99999999); //商户订单号 
    $params["amount"] = 100; //金额 
    $params["desc"] = '描述'; //企业付款描述 
    $params["openid"] = 'ortNx0YZcIiXVJzI5XbMLJpV2MDs'; //用户openid 
    $params["check_name"] = 'NO_CHECK'; //不检验用户姓名 
    $params['spbill_create_ip'] = $_SERVER['REMOTE_ADDR']; //获取IP

5.生成签名,这个非常坑,一定要放构建参数后面,而且跟微信官方提供的文档里面的生成签名不一样。

$str = 'amount=' . $params["amount"] . '&check_name=' . $params["check_name"] . '&desc=' . $params["desc"] . '&mch_appid=' . $params["mch_appid"] . '&mchid=' . $params["mchid"] . '&nonce_str=' . $params["nonce_str"] . '&openid=' . $params["openid"] . '&partner_trade_no=' . $params["partner_trade_no"] . '&spbill_create_ip=' . $params['spbill_create_ip'] . '&key=shzy9123hdbs612jhxagh7182xxxyhsax61'; 
    //md5加密 转换成大写
    $sign = strtoupper(md5($str)); 
    $params["sign"] = $sign; //签名

6.把构建的测试使用函数变成xml格式

$var=$this->arraytoxml($params);    //arraytoxml为数组变为xml的函数

7.提交参数。

$xml = $this->curl_post_ssl('
https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers',$var);


8.返回值处理。

function arraytoxml($data){
        $str='<xml>';
        foreach($data as $k=>$v) {
            $str.='<'.$k.'>'.$v.'</'.$k.'>';
        }
        $str.='</xml>';
        return $str;
    }
    public function curl_post_ssl($url, $vars)
    {
        $isdir = "cert/";//证书位置
        $ch = curl_init();//初始化curl
        curl_setopt($ch, CURLOPT_TIMEOUT, $second);//设置执行最长秒数
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_URL, $url);//抓取指定网页
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 终止从服务端进行验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//
        curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');//证书类型
        curl_setopt($ch, CURLOPT_SSLCERT, $isdir . 'apiclient_cert.pem');//证书位置
        curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');//CURLOPT_SSLKEY中规定的私钥的加密类型
        curl_setopt($ch, CURLOPT_SSLKEY, $isdir . 'apiclient_key.pem');//证书位置
        curl_setopt($ch, CURLOPT_CAINFO, 'PEM');
       // curl_setopt($ch, CURLOPT_CAINFO, $isdir . 'rootca.pem');
        
        curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);//全部数据使用HTTP协议中的"POST"操作来发送
        $data = curl_exec($ch);//执行回话
        if ($data) {
            curl_close($ch);
            return $data;
        } else {
            $error = curl_errno($ch);
            echo "call faild, errorCode:$error\n";
            curl_close($ch);
            return false;
        }
    }


   


已有 2784 位网友参与,快来吐槽:

发表评论

站点统计