当前位置:编程学习 > > 正文

php微信支付步骤(PHP实现微信提现企业付款到零钱)

时间:2022-01-14 02:55:57类别:编程学习

php微信支付步骤

PHP实现微信提现企业付款到零钱

怎么开通企业付款到零钱?

有的商户号的产品中心是没有这个功能的,不过,该功能的pid(product id)是5,只要随便进去某一个产品,在地址栏把pid改为5。

即可进入该功能页面,进行开通,不过要满足条件。

用户提现代码:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • //用户微信提现
  •  private function withdrawals_weixin($id){
  •     $falg = M('withdrawals')->where(['id'=>$id])->find();
  •     $openid = M('users')->where('user_id', $falg['user_id'])->value('openid');
  •     $data['openid'] = $openid;
  •     $data['pay_code'] = $falg['id'].$falg['user_id'];
  •     $data['desc'] = '提现ID'.$falg['id'];
  •     if($falg['taxfee'] >= $falg['money']){
  •       return array('status'=>1, 'msg'=>"提现额度必须大于手续费!" );
  •     }else{
  •       $data['money'] = bcsub($falg['money'], $falg['taxfee'], 2);
  •     }
  •     include_once PLUGIN_PATH . "payment/weixin/weixin.class.php";
  •     $weixin_obj = new \weixin();
  •     $result = $weixin_obj->transfer($data);
  •    
  •     return $result;
  •  }
  • 其中pay_code在商户号的提现功能是唯一的,所以为了防重放攻击,这个值千万不能用随机数,最好用ID,具有提现记录唯一。

    提现逻辑代码:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • // 微信提现转账
  •   function transfer($data){
  •     
  •     header("Content-type: text/html; charset=utf-8");
  •     //CA证书及支付信息
  •    $wxchat['appid'] = WxPayConfig::$appid;
  •    $wxchat['mchid'] = WxPayConfig::$mchid;
  •  
  •    $wxchat['api_cert'] = PLUGIN_PATH.'/payment/weixin/cert/apiclient_cert.pem';
  •     $wxchat['api_key'] = PLUGIN_PATH.'/payment/weixin/cert/apiclient_key.pem';
  •     
  •     // $wxchat['api_ca'] = '/plugins/payment/weixin/cert/rootca.pem';
  •    $webdata = array(
  •     'mch_appid' => $wxchat['appid'],
  •     'mchid'   => $wxchat['mchid'],
  •     'nonce_str' => md5(time()),
  •     //'device_info' => '1000',
  •     'partner_trade_no'=> $data['pay_code'], //商户订单号,需要唯一
  •     'openid' => $data['openid'],//转账用户的openid
  •     'check_name'=> 'NO_CHECK', //OPTION_CHECK不强制校验真实姓名, FORCE_CHECK:强制 NO_CHECK:
  •     //'re_user_name' => 'jorsh', //收款人用户姓名
  •     'amount' => $data['money'] * 100, //付款金额单位为分
  •     'desc'  => $data['desc'],
  •     'spbill_create_ip' => request()->ip(),
  •     );
  •   
  •    foreach ($webdata as $k => $v) {
  •    $tarr[] =$k.'='.$v;
  •     }
  •  
  •    sort($tarr);
  •    $sign = implode($tarr, '&');
  •    $sign .= '&key='.WxPayConfig::$key;
  •     $webdata['sign']=strtoupper(md5($sign));
  •     
  •     $wget = $this->array2xml($webdata);
  •     
  •     $pay_url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
  •  
  •     $res = $this->http_post($pay_url, $wget, $wxchat);
  •  
  •    if(!$res){
  •    return array('status'=>1, 'msg'=>"Can't connect the server" );
  •    }
  •     $content = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA);
  •     
  •    if(strval($content->return_code) == 'FAIL'){
  •    return array('status'=>1, 'msg'=>strval($content->return_msg));
  •    }
  •    if(strval($content->result_code) == 'FAIL'){
  •    return array('status'=>1, 'msg'=>strval($content->err_code),':'.strval($content->err_code_des));
  •     }
  •  
  •    $rdata = array(
  •     'mch_appid'    => strval($content->mch_appid),
  •     'mchid'      => strval($content->mchid),
  •     'device_info'   => strval($content->device_info),
  •     'nonce_str'    => strval($content->nonce_str),
  •     'result_code'   => strval($content->result_code),
  •     'partner_trade_no' => strval($content->partner_trade_no),
  •     'payment_no'    => strval($content->payment_no),
  •     'payment_time'   => strval($content->payment_time),
  •    );
  •    return $rdata;
  •  
  •   }
  • 其中 PLUGIN_PATH 是一个常量

  • ?
  • 1
  • define('PLUGIN_PATH', __DIR__ . '/plugins/');
  • 定义插件目录

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • /**
  •    * 将一个数组转换为 XML 结构的字符串
  •    * @param array $arr 要转换的数组
  •    * @param int $level 节点层级, 1 为 Root.
  •    * @return string XML 结构的字符串
  •    */
  •   function array2xml($arr, $level = 1) {
  •    $s = $level == 1 ? "<xml>" : '';
  •    foreach($arr as $tagname => $value) {
  •    if (is_numeric($tagname)) {
  •     $tagname = $value['TagName'];
  •     unset($value['TagName']);
  •    }
  •    if(!is_array($value)) {
  •     $s .= "<{$tagname}>".(!is_numeric($value) ? '<![CDATA[' : '').$value.(!is_numeric($value) ? ']]>' : '')."</{$tagname}>";
  •    } else {
  •     $s .= "<{$tagname}>" . $this->array2xml($value, $level + 1)."</{$tagname}>";
  •    }
  •    }
  •    $s = preg_replace("/([\x01-\x08\x0b-\x0c\x0e-\x1f])+/", ' ', $s);
  •    return $level == 1 ? $s."</xml>" : $s;
  •   }
  •   
  •   function http_post($url, $param, $wxchat) {
  •    $oCurl = curl_init();
  •    if (stripos($url, "https://") !== FALSE) {
  •    curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
  •    curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
  •    }
  •    if (is_string($param)) {
  •    $strPOST = $param;
  •    } else {
  •    $aPOST = array();
  •    foreach ($param as $key => $val) {
  •     $aPOST[] = $key . "=" . urlencode($val);
  •    }
  •    $strPOST = join("&", $aPOST);
  •    }
  •    curl_setopt($oCurl, CURLOPT_URL, $url);
  •    curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
  •    curl_setopt($oCurl, CURLOPT_POST, true);
  •    curl_setopt($oCurl, CURLOPT_POSTFIELDS, $strPOST);
  •    if($wxchat){
  •    curl_setopt($oCurl,CURLOPT_SSLCERT,$wxchat['api_cert']);
  •    curl_setopt($oCurl,CURLOPT_SSLKEY,$wxchat['api_key']);
  •    curl_setopt($oCurl,CURLOPT_CAINFO,$wxchat['api_ca']);
  •    }
  •    $sContent = curl_exec($oCurl);
  •    $aStatus = curl_getinfo($oCurl);
  •     curl_close($oCurl);
  •     
  •    if (intval($aStatus["http_code"]) == 200) {
  •    return $sContent;
  •    } else {
  •    return false;
  •    }
  •  }
  • 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    原文链接:https://blog.csdn.net/qq_36602939/article/details/91399977

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐