100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > php金额提现功能 PHP实现微信开发中提现功能(企业付款到用户零钱)

php金额提现功能 PHP实现微信开发中提现功能(企业付款到用户零钱)

时间:2021-01-27 00:32:18

相关推荐

php金额提现功能 PHP实现微信开发中提现功能(企业付款到用户零钱)

一.实现该功能目的

这几天在小程序里要实现用户从系统中提现到零钱的功能,查了一下文档可以使用 企业付款到用户零钱 来实现;

官方文档:https://pay./wiki/doc/api/tools/mch_pay.php?chapter=14_1;

注意事项:商户打款时是从商户可用余额中减钱,所以确保商户可用余额充足,同时注意官方文档中的付款规则;

二.php实现

//封装提现方法

function tixian($money){

$appid = "################";//商户账号appid

$secret = "##########";//api密码

$mch_id = "#######";//商户号

$mch_no = "#######";

$openid="123456789";//授权用户openid

$arr = array();

$arr['mch_appid'] = $appid;

$arr['mchid'] = $mch_id;

$arr['nonce_str'] = ugv::randomid(20);//随机字符串,不长于32位

$arr['partner_trade_no'] = '1298016501' . date("Ymd") . rand(10000, 90000) . rand(10000, 90000);//商户订单号

$arr['openid'] = $openid;

$arr['check_name'] = 'NO_CHECK';//是否验证用户真实姓名,这里不验证

$arr['amount'] = $money;//付款金额,单位为分

$desc = "###提现";

$arr['desc'] = $desc;//描述信息

$arr['spbill_create_ip'] = '192.168.0.1';//获取服务器的ip

//封装的关于签名的算法

$notify = new Notify_pub();

$notify-weixin_app_config = array();

$notify-weixin_app_config['KEY'] = $mch_no;

$arr['sign'] = $notify-getSign($arr);//签名

$var = $notify-arrayToXml($arr);

$xml = $this-curl_post_ssl('https://api.mch./mmpaymkttransfers/promotion/transfers', $var, 30, array(), 1);

$rdata = simplexml_load_string($xml, '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));

if ($return_code == 'SUCCESS' && $result_code == 'SUCCESS') {

$isrr = array(

'con'='ok',

'error' = 0,

);

} else {

$returnmsg = (string)$rdata-return_msg;

$isrr = array(

'error' = 1,

'errmsg' = $returnmsg,

);

}

return json_encode($isrr);

}

//上个方法中用到的curl_post_ssl()

function curl_post_ssl($url, $vars, $second = 30, $aHeader = array())

{

$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');

if (count($aHeader) = 1) {

curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);//设置头部

}

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";

curl_close($ch);

return false;

}

}

三.补充

关于具体签名算法,可参考微信官方文档;

简单示范签名算法:

//将要发送的数据整理为$data

ksort($data);//排序

//使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串

$str='';

foreach($data as $k=$v) {

$str.=$k.'='.$v.'&';

}

//拼接API密钥

$str.='key='.$secrect;

$data['sign']=md5($str);//加密

将数组转换成xml格式(简单方法):

//遍历数组方法

function arraytoxml($data){

$str='xml';

foreach($data as $k=$v) {

$str.=''.$k.''.$v.'/'.$k.'';

}

$str.='/xml';

return $str;

}

将xml格式转换为数组:

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;

}

pulic

以上是全部代码,不懂的可加我微信问我:1632282572

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。