晓夏

北漂的女孩

Good Luck To You!

php【微信支付】企业付款到零钱

浏览量:399

最近负责楚楚街各种活动,新作的瓜分红包功能,达到条件后直接把钱打到用户微信零钱里面。

微信文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1
自己写了一个小例子,实现方式:

<?php
define("MCHAPPID","wx*************");//商户的应用appid
define("MCHID","12***************");//商户ID
define("NAMEOPENID","oi**************");//用户openid
define("MD5KEY", "QL*******************");  //支付密钥签名
$data = array(
    "check_name"=>"FORCE_CHECK",
    "re_user_name"=>"梁慧菊",
    "openid" => NAMEOPENID,
    "amount" => 100,
    "desc" => "测试瓜分红包,企业站直接付款到余额",

);
echo "<pre>";
$res = sendPacket_f($data);
var_dump($res);
die();
/**
 * 企业账户直接打钱到微信
 * @return mixed
 * author        :lianghuiju@chuchujie.com
 * function_name : sendPacket_f
 * datetime      : 2018/7/19
 * description   :
 */
function sendPacket_f($data) {
    $check_name = $data['check_name'];
    $re_user_name = $data['re_user_name'];
    $openid = $data['openid'];
    $amount = $data['amount'];
    $desc = $data['desc'];
    if(empty($openid) || empty($amount) || empty($amount)){
        $dataRes = array(
           "return_code"=> "SUCCESS",
           "return_msg"=> "参数错误:输入的商户号有误",
           "result_code"=> "FAIL",
           "err_msg"=> $data
        );
        return $dataRes;
    }
    $data['check_name'] = $check_name;//NO_CHEC不用验证真实姓名,FORCE_CHECK验证真实姓名;这个是设置是否检测用户真实姓名的
    $data['re_user_name'] = $re_user_name;//用户的真实名字
    $time = time();
    $partner_trade_no = 'FA' . $time . mt_rand(100, 10000);
    $data['mch_appid'] = MCHAPPID;
    $data['mchid'] = MCHID;
    $data['nonce_str'] = unicode();//字符串算法
    $data['partner_trade_no'] = $partner_trade_no;//订单号。
    $data['openid'] = $openid;//用户的openid
    $data['amount'] = $amount;//提现金额 分
    $data['desc'] = $desc ? $desc : '楚楚街活动红包';//订单描述
    $data['spbill_create_ip'] = $_SERVER['SERVER_ADDR'];//服务器的ip
    $data['sign'] =  _encode($data);//这个就是个码API密。32位的MD5
    $xml = arraytoxml($data);
    $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
    $res = curl($xml, $url);
    $return = xmltoarray($res);
    return $return;
}

/**
 * 唯一的字符串算法
 * @return string
 * author        :lianghuiju@chuchujie.com
 * function_name : unicode
 * datetime      : 2018/7/19
 * description   :
 */
function unicode() {
    $str = uniqid(mt_rand(), 1);
    $str = sha1($str);
    return md5($str);
}

/**
 * 数组传为xml字符串
 * @param $data
 * @return string
 * author        :lianghuiju@chuchujie.com
 * function_name : arraytoxml
 * datetime      : 2018/7/19
 * description   :
 */
function arraytoxml($data) {
    $str = '<xml>';
    foreach ($data as $k => $v) {
        $str .= '<' . $k . '>' . $v . '</' . $k . '>';
    }
    $str .= '</xml>';
    return $str;
}

/**
 * 字符串xml转化成数组
 * @param $xml
 * @return mixed
 * author        :lianghuiju@chuchujie.com
 * function_name : xmltoarray
 * datetime      : 2018/7/19
 * description   :
 */
function xmltoarray($xml) {
    //禁止引用外部xml实体
    libxml_disable_entity_loader(true);
    $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
    $val = json_decode(json_encode($xmlstring), true);
    return $val;
}

/**
 * curl请求
 * @param string $param
 * @param $url
 * @return mixed
 * author        :lianghuiju@chuchujie.com
 * function_name : curl
 * datetime      : 2018/7/19
 * description   :
 */
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, getcwd() . '/cert/apiclient_cert.pem'); //这个是证书的位置
    curl_setopt($ch, CURLOPT_SSLKEY, getcwd() . '/cert/apiclient_key.pem'); //这个也是证书的位置
    $data = curl_exec($ch);                 //运行curl
    curl_close($ch);
    return $data;
}

/**
 * 加密函数
 * @param     请求的参数
 * @return string   加密串
 */
 function _encode($data) {
    //签名步骤一:按字典序排序参数
    ksort($data);
    $buff = "";
    foreach ($data as $k => $v) {
        if ($k != "sign" && $v != "" && !is_array($v)) {
            $buff .= $k . "=" . $v . "&";
        }
    }
    $string = trim($buff, "&");
    //签名步骤二:在string后加入KEY
    $string = $string . "&key=".MD5KEY;
    //签名步骤三:MD5加密
    $string = md5($string);
    //签名步骤四:所有字符转为大写
    $result = strtoupper($string);
    return $result;
}


神回复

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。