先贴官网文档说明文档:
https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1
核心代码:
注意签名部分key是商户平台api秘钥,32位
//提现到零钱 public function transfers() { $conf = $this->config; $order_code = date('YmdHis') . mt_rand(1000, 9999); $param = [ 'mch_appid' => $conf['appid'], //商户账号appid,小程序或公众号appid,绑定商户平台的 'mchid' => $conf['merchantId'], //商户号 'nonce_str' => substr(md5(time()), 5, 10), //'sign' => '', 'partner_trade_no' => $order_code,//商户订单号 'openid' => $openid, 'check_name' => 'NO_CHECK', //NO_CHECK:不校验真实姓名 ; FORCE_CHECK:强校验真实姓名 // 're_user_name' => '', //收款用户真实姓名,上面参数FORCE_CHECK必填 'amount' => '2', //单位为分 'desc' => '提现一笔', //'spbill_create_ip' => '', ]; $param['sign'] = $this->_makeSign($param); $xmldata = $this->array2xml($param); $option = [ CURLOPT_SSLCERT => $conf['merchantCertFile'], CURLOPT_SSLKEY => $conf['merchantPrivateKeyFile'], // 'CURLOPT_CAINFO' => '' //api_ca ]; $resxml = \app\common\service\HttpClient::post('https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers', $xmldata, $option); $rdata = simplexml_load_string($resxml, 'SimpleXMLElement', LIBXML_NOCDATA); $return_code = (string)$rdata->return_code; $result_code = (string)$rdata->result_code; $return_code = trim(strtoupper($return_code)); $result_code = trim(strtoupper($result_code)); print_r($rdata); exit; } public function _makeSign($data) { ksort($data); $conf = $this->config; $str = ''; foreach ($data as $k => $v) { $str .= $k . '=' . $v . '&'; } $str .= 'key=' . $conf['api_secret']; return md5($str); } private function array2xml($data) { $str = '<xml>'; foreach ($data as $k => $v) { $str .= '<' . $k . '>' . $v . '</' . $k . '>'; } $str .= '</xml>'; return $str; } private function xml2array($xml) { //禁止引用外部xml实体 libxml_disable_entity_loader(true); $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); $val = json_decode(json_encode($xmlstring), true); return $val; }