加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php实现微信企业付款到个人零钱功能

发布时间:2020-05-25 02:38:07 所属栏目:PHP 来源:互联网
导读:这篇文章主要为大家详细介绍了php实现微信企业付款到个人零钱功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了php微信企业付款到个人零钱的具体代码,供大家参考,具体内容如下

1.基本配置

//公众账号appid

$data["mch_appid"] = 'appid';

//商户号

$data["mchid"] = '';

//随机字符串

$data["nonce_str"] = 'suiji'.mt_rand(100,999);

//商户订单号

$data["partner_trade_no"]=date('YmdHis').mt_rand(1000,9999);

//金额 用户输入的提现金额需要乘以100

$data["amount"] = $money;

//企业付款描述

$data["desc"] = '企业付款到个人零钱';

//用户openid

$data["openid"] = $openid;

//不检验用户姓名

$data["check_name"] = 'NO_CHECK';

//获取IP

$data['spbill_create_ip']=$_SERVER['SERVER_ADDR'];

//商户密钥

$data['key']='';

//商户证书 商户平台的API安全证书下载

$data['apiclient_cert.pem']

$data['apiclient_key.pem']

2.PHP代码

/**

**开始支付

/

public function userpay(){

$money = ‘用户输入提现金额';

$info['money'] = ‘用户余额';

if ($this->openid && $money){

if ($money>$info['money'] ){

echo json_encode([

'status' => 1,

'message' => '余额不足,不能提现!',

'code'=>'余额不足,不能提现!'

]);

}elseif ($money<1){

echo json_encode([

'status' => 2,

'message' => '提现金额不能小于1元',

'code'=>'提现金额太低'

]);

}else{

$openid = $this->openid;

$trade_no = date('YmdHis').mt_rand(1000,9999);

$res = $this->pay($openid,$trade_no,$money*100,'微信提现');

//结果打印

if($res['result_code']=="SUCCESS"){

echo json_encode([

'status' => 3,

'message' => '提现成功!',

]);

}elseif ($res['err_code']=="SENDNUM_LIMIT"){

echo json_encode([

'status' => 4,

'message' => '提现失败!',

'code'=>'每日仅能提现一次',

]);

}else{

echo json_encode([

'status' => 5,

'code'=>$res['err_code'],

]);

}

}

}else{

echo json_encode([

'status' => 5,

'message' => '未检测到您当前微信账号~',

]);

}

}

/**

*支付方法

/

public function pay($openid,$money,$desc){

$params["mch_appid"]='';

$params["mchid"] = '';

$params["nonce_str"]= 'suiji'.mt_rand(100,999);

$params["partner_trade_no"] = $trade_no;

$params["amount"]= $money;

$params["desc"]= $desc;

$params["openid"]= $openid;

$params["check_name"]= 'NO_CHECK';

$params['spbill_create_ip'] = $_SERVER['SERVER_ADDR'];

//生成签名

$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=商户密钥';

//md5加密 转换成大写

$sign = strtoupper(md5($str));

//生成签名

$params['sign'] = $sign;

//构造XML数据

$xmldata = $this->array_to_xml($params); //数组转XML

$url='https://api.mch.weixin.qq.com/mmpaymkttransfers/prom otion/transfers';

//发送post请求

$res = $this->curl_post_ssl($url,$xmldata); //curl请求

if(!$res){

return array('status'=>1,

'msg'=>"服务器连接失败" );

}

//付款结果分析

$content = $this->xml_to_array($res); //xml转数组

return $content;

}

/**

* curl请求

/

public function curl_post_ssl($url,$xmldata,$second=30,$aHeader=array()){

$ch = curl_init();

//超时时间

curl_setopt($ch,CURLOPT_TIMEOUT,$second);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

//这里设置代理,如果有的话

//curl_setopt($ch,CURLOPT_PROXY,'10.206.30.98');

//curl_setopt($ch,CURLOPT_PROXYPORT,8080);

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

//默认格式为PEM,可以注释

curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');

//绝对地址可使用 dirname(__DIR__)打印,如果不是绝对地址会报 58 错误

curl_setopt($ch,CURLOPT_SSLCERT,' 绝对地址/apiclient_cert.pem');

curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');

curl_setopt($ch,CURLOPT_SSLKEY,'绝对地址/apiclient_key.pem');

if( count($aHeader) >= 1 ){

curl_setopt($ch,CURLOPT_HTTPHEADER,$aHeader);

}

curl_setopt($ch,CURLOPT_POST,1);

curl_setopt($ch,CURLOPT_POSTFIELDS,$xmldata);

$data = curl_exec($ch);

if($data){

curl_close($ch);

return $data;

}

else {

$error = curl_errno($ch);

echo "call faild,errorCode:$errorn";

die();

curl_close($ch);

return false;

}

}

/**

* array 转 xml

* 用于生成签名

*/

public function array_to_xml($arr){

$xml = "";

foreach ($arr as $key => $val) {

if (is_numeric($val)) {

$xml .= "<" .$key.">".$val."

} else

$xml .= "<".$key.">

}

$xml .= "";

return $xml;

}

/**

* xml 转化为array

*/

public function xml_to_array($xml){

//禁止引用外部xml实体

libxml_disable_entity_loader(true);

$values = json_decode(json_encode(simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA)),true);

return $values;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读