【Api】PHP与微信"大众年夜众号支付,很大略
【Api】PHP开拓APP端微信支付功能,学一下吧
【Api】看看PHP是如何实现微信扫码支付的。
微信支付企业付款到零钱功能运用广泛,比如微信红包褒奖,业务结算等。通过企业向个人付款,付款资金将直接进入用户微信零钱。
一 开通条件
付款资金
企业付款到零钱资金利用商户号余额资金。
根据商户号的账户开通情形,实际出款账户有做差异:
◆ 默认情形下,企业付款到零钱利用商户号基本户(或余额账户)余额。如商户号已开通运营账户,则企业付款到零钱利用运营账户内的资金。
◆ 基本户(或上述其他出款账户)的资金来源,可能是交易结算款项(仅基本户),或给账户充值的资金。当出款账户余额不敷时,付款将因余额不敷而付款失落败。
付款规则
付款办法
◆ 支持API接口或网页操作,付款至目标用户。
收款用户身份指定
◆ 通过APPID+OPENID指定收款用户。
◆ APPID须要为申请商户号时的APPID,或者与商户号有绑定关系。
◆ OPENID的获取办法,可参照:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839
付款额度
◆ 不支持给非实名用户打款
◆ 给同一个实名用户付款,单笔单日限额2W/2W
◆ 一个商户同一日付款总额限额100W
把稳:以上规则中的限额2w、100w由于打算规则与风控策略的关系,不是完备精确值,金额仅做参考,请不要依赖此金额做系统处理,应以接口实际返回和查询结果为准,请知晓。
收款用户身份校验
◆ 针对付款的目标用户,供应可校验真实姓名的功能
查询付款情形
◆ 已付款的记录,企业可通过企业付款查询查看相应数据,或者查询商户号资金流水。
付款频次
◆ 默认每天最多可向同一个用户付款10次,可以在商户平台--API安全进行设置
其他把稳事变
◆ 付款金额必须小于或即是商户当前可用余额的金额;
二 接口地址
接口链接:https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
要求参数:
详细参看官方企业付款开拓文档解释
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,$money100,'微信提现'); //结果打印 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, 'message' => '提现失落败!
', 'code'=>$res['err_code'], ]); } } }else{ echo json_encode([ 'status' => 5, 'message' => '未检测到您当前微信账号~', ]); } }
支付方法
/支付方法/public function pay($openid,$trade_no,$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要求
/ 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:$error\n\"大众; die(); curl_close($ch); return false; } }
天生署名
/ array 转 xml 用于天生署名/public function array_to_xml($arr){ $xml = \"大众<xml>\"大众; foreach ($arr as $key => $val) { if (is_numeric($val)) { $xml .= \"大众<\公众 .$key.\"大众>\"大众.$val.\公众</\"大众.$key.\"大众>\"大众; } else $xml .= \公众<\"大众.$key.\公众><![CDATA[\公众.$val.\"大众]]></\"大众.$key.\"大众>\"大众; } $xml .= \公众</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; }
效果如下:
以上是文章全部内容,有学习与履历互换的可以关注小编。有技能问题可以一起磋商与互换,如果你是PHP的,小编也可以拉你进微信技能群,互换与学习!