首页 > 编程 > PHP > 正文

php如何实现微信企业号支付个人

2020-03-22 20:11:45
字体:
来源:转载
供稿:网友
这篇文章主要介绍了php实现微信企业号支付个人的方法,详细分析了php微信企业号的支付配置、证书使用及支付流程相关操作技巧,需要的朋友可以参考下

本文实例讲述了php实现微信企业号支付个人的方法。分享给大家供大家参考,具体如下:

导语:分销商,微商提现怎么提?

直接用微信支付。

实现如下:

微信支付配置

/*微信支付*/ PAY_WEIXIN = array( appid = XXXX , appsecret = XXXXXXX , mchid = 1283301801 , //商户号 key = zhudianbaodiandodozhudianbao0527 , //商户支付秘钥 apiclient_cert = Conf/cert/apiclient_cert.pem , //商户证书apiclient_cert.pem apiclient_key = Conf/cert/apiclient_key.pem , //商户证书apiclient_key.pem )

arrayToXml

/*** array转xmlfunction arrayToXml($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;}

使用证书,以post方式提交xml到对应的接口url

/*** 作用:使用证书,以post方式提交xml到对应的接口urlfunction postXmlSSLCurl($xml, $url, $second, $cert, $key) $ch = curl_init(); //超时时间 curl_setopt($ch,CURLOPT_TIMEOUT,$second ? $second : $this- timeout); //这里设置代理,如果有的话 //curl_setopt($ch,CURLOPT_PROXY, 8.8.8.8  //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); //设置header curl_setopt($ch,CURLOPT_HEADER,FALSE); //要求结果为字符串且输出到屏幕上 curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); //设置证书 //使用证书:cert 与 key 分别属于两个.pem文件 //默认格式为PEM,可以注释 curl_setopt($ch,CURLOPT_SSLCERTTYPE, PEM  curl_setopt($ch,CURLOPT_SSLCERT,$cert); //默认格式为PEM,可以注释 curl_setopt($ch,CURLOPT_SSLKEYTYPE, PEM  curl_setopt($ch,CURLOPT_SSLKEY, $key); //post提交方式 curl_setopt($ch,CURLOPT_POST, true); curl_setopt($ch,CURLOPT_POSTFIELDS,$xml); $data = curl_exec($ch); //返回结果 if($data){ curl_close($ch); return $this- xmlToArray($data); else { $error = curl_errno($ch); echo curl出错,错误码:$error . br  curl_close($ch); return false;}

企业向个人付款

//企业向个人付款html' target='_blank'>public function payToUser($params, $key, $apicent_cert, $apiclient_key) { $url = https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers  //检测必填参数 if($params[ partner_trade_no ] == null) { // exit( 退款申请接口中,缺少必填参数partner_trade_no! . br  }elseif($params[ openid ] == null){ exit( 退款申请接口中,缺少必填参数openid! . br  }elseif($params[ check_name ] == null){ //NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账)OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功) exit( 退款申请接口中,缺少必填参数check_name! . br  }elseif(($params[ check_name ] == FORCE_CHECK or $params[ check_name ] == OPTION_CHECK ) ($params[ re_user_name ] == null)){ //收款用户真实姓名。 exit( 退款申请接口中,缺少必填参数re_user_name! . br  }elseif($params[ amount ] == null){ exit( 退款申请接口中,缺少必填参数amount! . br  }elseif($params[ desc ] == null){ exit( 退款申请接口中,缺少必填参数desc! . br  $params[ mch_appid ] = $this- appid;//公众账号ID $params[ mchid ] = $this- mchid;//商户号 $params[ nonce_str ] = $this- createNoncestr();//随机字符串 $params[ spbill_create_ip ] = $_SERVER[ REMOTE_ADDR ] == ::1 ? 192.127.1.1 : $_SERVER[ REMOTE_ADDR //获取IP $params[ sign ] = $this- getSign($params, $key);//签名 $xml = $this- arrayToXml($params); return $this- postXmlSSLCurl($xml, $url, false, $apicent_cert, $apiclient_key);}

企业付款

private function _enterprisePay($number, $member_id, $amount, $desc) // 获取openid $wxuser_id = M( Member )- where(array( id = $member_id))- getField( wxuser_id  $openid = M( Wxuser )- where(array( id = $wxuser_id))- getField( openid  $pay = C( PAY_WEIXIN  import( @.Action.WxDevelop  $enterprise = new WxEnterprise($pay[ appid ], $pay[ appsecret ], $pay[ mchid  $params = array( partner_trade_no = $number, openid = $openid, check_name = NO_CHECK , amount = $amount, // 总计 desc = $desc, $result = $enterprise- payToUser($params, $pay[ key ], $pay[ apiclient_cert ], $pay[ apiclient_key  return $result;}

处理分销商提现

private function _handle($truename, $price) { // 处理分销商提现 $withdrawid = date( ymdHis ) . strval(rand(1000, 9999)); $data = array( withdrawid = $withdrawid, store_id = $this- store_id, member_id = $this- member_id, truename = $truename, price = $price, addtime = time()); //免审核 if ($price = C( withdraw_uncheck_value )) { $data[ need_check ] = 0; $data[ status ] = 1; if ($this- withdrawModel- add($data)) { $result = $this- _enterprisePay($withdrawid, $this- member_id, $price * 100, 分销商( . $truename . )提现  //遇到支付信息出错,转为需审核提现 if ($result[ return_code ] != SUCCESS ) { $this- withdrawModel- where(array( withdrawid = $withdrawid))- save(array( need_check = 1, status = 0)); $this- assign( success , 2); else { //设置微信交易号 $this- withdrawModel- where(array( withdrawid = $withdrawid))- save(array( payment_no = $result[ payment_no ])); //增加佣金流水,待修复 $data = array( store_id = $this- store_id, user_type = 2, user_id = $this- shop_id, trade_type = 2, trade_no = $withdrawid, price = -$price, status = 1, message = $truename. 提现 , addtime = time()); M( Twitter_log )- add($data); //减少相应可提佣金 M( Member )- where(array( id = $this- member_id))- setInc( money , -$price); $this- assign( success , 1); //发送佣金变动消息 import( @.Action.Tmplmsg  $tmplmsg = new Tmplmsg(); $tmplmsg- send(Tmplmsg::PRICE_CHANGE, $this- member_id, array( token = $this- token, intro = 分销佣金提现转出 , price = $price, business = BUSINESS)); else { $this- error( 提现信息错误!  //需要审核 else { $this- withdrawModel- add($data); $this- assign( success , 2);}

提供企业向用户付款的功能,支持企业通过API接口付款,或通过微信支付商户平台网页功能操作付款。

温馨提示:

◆ 给同一个实名用户付款,单笔单日限额2W/2W
◆ 给同一个非实名用户付款,单笔单日限额2000/2000
◆ 一个商户同一日付款总额限额100W
◆ 仅支持商户号已绑定的APPID;
◆ 针对付款的目标用户,已微信支付实名认证的用户可提供校验真实姓名的功能,未实名认证的用户无法校验,企业可根据自身业务的安全级别选择验证类型;
◆ 付款金额必须小于或等于商户当前可用余额的金额;
◆ 已付款的记录,企业可通过企业付款查询查看相应数据。

到账

付款资金将进入目标用户的零钱(微信-我-钱包-零钱)。微信支付将做零钱入账消息通知,零钱收支明细会展示相应记录。

温馨提示:

针对无零钱账户的历史客户端版本,资金将进入用户的红包账户,微信支付无消息通知用户,企业可选择自行触达用户。

接口链接:https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers

是否需要证书
请求需要双向证书。

数据示例:

 xml  mch_appid wxe062425f740c30d8 /mch_appid  mchid 10000098 /mchid  nonce_str 3PG2J4ILTKCH16CQ2502SI8ZNMTM67VS /nonce_str  partner_trade_no 100000982014120919616 /partner_trade_no  openid ohO4Gt7wVPxIT1A9GjFaMYMiZY1s /openid  check_name OPTION_CHECK /check_name  re_user_name 张三 /re_user_name  amount 100 /amount  desc 节日快乐! /desc  spbill_create_ip 10.2.3.10 /spbill_create_ip  sign C97BDBACF37622775366F38B629F45E3 /sign  /xml 

成功示例:

 xml  return_code ![CDATA[SUCCESS]] /return_code  return_msg ![CDATA[]] /return_msg  mch_appid ![CDATA[wxec38b8ff840bd989]] /mch_appid  mchid ![CDATA[10013274]] /mchid  device_info ![CDATA[]] /device_info  nonce_str ![CDATA[lxuDzMnRjpcXzxLx0q]] /nonce_str  result_code ![CDATA[SUCCESS]] /result_code  partner_trade_no ![CDATA[10013574201505191526582441]] /partner_trade_no  payment_no ![CDATA[1000018301201505190181489473]] /payment_no  payment_time ![CDATA[2015-05-19 15:26:59]] /payment_time  /xml 

错误示例:

 xml  return_code ![CDATA[FAIL]] /return_code  return_msg ![CDATA[系统繁忙,请稍后再试.]] /return_msg  result_code ![CDATA[FAIL]] /result_code  err_code ![CDATA[SYSTEMERROR]] /err_code  err_code_des ![CDATA[系统繁忙,请稍后再试.]] /err_code_des  /xml 

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP !

相关推荐:

PHP实现微信公众平台企业号验证接口

如何使用PHP导出数据到淘宝助手CSV

以上就是php如何实现微信企业号支付个人的详细内容,PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表