tp6+企业付款到零钱

一 开通条件,就是首先要在微信平台设置好。

以下微信文档里有的,我这里大概掠几项比较重要的。

付款资金

企业付款到零钱资金使用商户号余额资金。

根据商户号的账户开通情况,实际出款账户有做区别:

◆ 默认情况下,企业付款到零钱使用商户号基本户(或余额账户)余额。如商户号已开通运营账户,则企业付款到零钱使用运营账户内的资金。

◆ 基本户(或上述其他出款账户)的资金来源,可能是交易结算款项(仅基本户),或给账户充值的资金。当出款账户余额不足时,付款将因余额不足而付款失败。

付款规则

付款方式

  • 支持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安全进行设置

其他注意事项

  • 付款金额必须小于或等于商户当前可用余额的金额;

接下来上代码,直接复制粘贴,自己改下参数

Wxpay.php

<?php

namespace app\controller\Admin;

use think\facade\Request;

class Wxpay
{
    //这里就是入口函数
    public function index($data_apply) {
        $total_amount = (100) * $data_apply['amount_money'];//单位分,所以*100
        $data=array(
            'mch_appid'=>'',//商户账号appid
            'mchid'=> '',//商户号
            'nonce_str'=>$this->createNoncestr(),//随机字符串
            'partner_trade_no'=> $data_apply['number'],//商户订单号
            'openid'=> $data_apply['openid'],//用户openid
            'check_name'=>'NO_CHECK',//NO_CHECK不校验用户姓名选项,check_name校验用户姓名
            're_user_name'=> '',//收款用户姓名,NO_CHECK可以是空值
            'amount'=>$total_amount,//金额
            'desc'=> '提现',//企业付款描述信息
            'spbill_create_ip'=> Request::ip(),//Ip地址
        );
        $secrect_key='';///这个就是个API密码。MD5 32位。
        $data=array_filter($data);
        ksort($data);
        $str='';
        foreach($data as $k=>$v) {
            $str.=$k.'='.$v.'&';
        }
        $str.='key='.$secrect_key;
        $data['sign']=md5($str);
        $xml=$this->arraytoxml($data);

        $url='https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; //调用接口
        $res=$this->curl($xml,$url);
        $return=$this->xmltoarray($res);
        return $return;
//        print_r($return);
        //返回来的结果
        // [return_code] => SUCCESS [return_msg] => Array ( ) [mch_appid] => wxd44b890e61f72c63 [mchid] => 1493475512 [nonce_str] => 616615516 [result_code] => SUCCESS [partner_trade_no] => 20186505080216815
        // [payment_no] => 1000018361251805057502564679 [payment_time] => 2018-05-15 15:29:50

        //$responseObj = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA);//xml转数组
        //$res= $responseObj->return_code;  //SUCCESS  如果返回来SUCCESS,则发生成功,处理自己的逻辑,,,,,值得注意的是打款失败也会返回SUCCESS,$return是返回的整条数据包含错误信息
        //if ($res == 'SUCCESS'){
            //return 200;
        //}else{
            //return 201;
        //}
    }

    //随机字符串
    private function createNoncestr() {
        $chars = "ABCDEFGHIJKIMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        $str = "";
        //不长于32位
        for ($i = 0; $i < 30; $i++) {
            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        }
        return $str;
    }

    public function unicode() {
        $str = uniqid(mt_rand(),1);
        $str=sha1($str);
        return md5($str);
    }

    public function arraytoxml($data){
        $str='<xml>';
        foreach($data as $k=>$v) {
            $str.='<'.$k.'>'.$v.'</'.$k.'>';
        }
        $str.='</xml>';
        return $str;
    }
    public 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;
    }

    public function curl($param="",$url) {
        $postUrl = $url;
        $curlPost = $param;
        $ch = curl_init();                                      //初始化curl
        curl_setopt($ch, CURLOPT_URL,$postUrl);                 //抓取指定网页
        curl_setopt($ch, CURLOPT_HEADER, 0);                    //设置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);            //要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_POST, 1);                      //post提交方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);           // 增加 HTTP Header(头)里的字段
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);        // 终止从服务端进行验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch,CURLOPT_SSLCERT,'****/****/****/apiclient_cert.pem'); //这个是证书的位置绝对路径
        curl_setopt($ch,CURLOPT_SSLKEY,'****/***/***/apiclient_key.pem'); //这个也是证书的位置绝对路径
        $data = curl_exec($ch);                                 //运行curl
        curl_close($ch);
        return $data;
    }
}

控制器使用

public function apply_for(Request $request){
    $data = $request -> param();
    //请求打款
    $wxpay = new Wxpay();
    $pay = $wxpay->index($finance_apply_for);
    if ($pay['return_code'] == 'SUCCESS' && $pay['return_msg'] == []){
          //........自己的业务
        return json(['code' => 200, 'message' => '审核通过']);
    } else{
        return json(['code' => 201, 'message' => '打款失败']);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值