tp6+ empresa pago al cambio

Una vez que se activan las condiciones, primero se debe configurar en la plataforma WeChat.

Hay algunos en los siguientes documentos de WeChat, y estos son algunos de los más importantes.

fondos de pago

La empresa paga al fondo de cambio utilizando el fondo de saldo de la cuenta mercantil.

De acuerdo con el estado de apertura de la cuenta de comerciante, la cuenta de pago real es diferente:

◆ De forma predeterminada, los pagos corporativos para cambiar utilizan el saldo de la cuenta básica (o cuenta de saldo) de la cuenta de comerciante. Si la cuenta mercantil ha abierto una cuenta operativa, la empresa utilizará los fondos de la cuenta operativa para pagar el cambio.

◆ La fuente de fondos para la cuenta básica (o las otras cuentas de pago mencionadas anteriormente) pueden ser fondos de liquidación de transacciones (solo para la cuenta básica), o fondos para recargar la cuenta. Cuando el saldo de la cuenta de retiro es insuficiente, el pago fallará debido a un saldo insuficiente.

reglas de pago

método de pago

  • Admite la interfaz API o la operación de la página web y paga a los usuarios objetivo.

Designación de identidad del usuario destinatario

  • Especifique el usuario receptor a través de APPID+OPENID.
  • El APPID debe ser el APPID al solicitar una cuenta de comerciante, o estar vinculado a una cuenta de comerciante.
  • Para saber cómo obtener OPENID, consulte: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839

monto del pago

  • No se admite el pago a usuarios sin nombre real
  • Pague al mismo usuario de nombre real, con un límite diario único de 2W/2W
  • El límite de pago total de un comerciante en el mismo día es de 100W

Nota: Los límites de 2w y 100w en las reglas anteriores no son completamente precisos debido a la relación entre las reglas de cálculo y las estrategias de control de riesgos. La cantidad es solo para referencia. No confíe en esta cantidad para el procesamiento del sistema. El rendimiento real y prevalecerán los resultados de la consulta de la interfaz.

Recibir la verificación de identidad del usuario

  • Para los usuarios objetivo que pagan, proporcione la función de verificar el nombre real

Consultar estado de pago

  • Para el registro de pago, la empresa puede verificar los datos correspondientes a través de la consulta de pago de la empresa o consultar el flujo de fondos de la cuenta mercantil.

Frecuencia de pago

  • De forma predeterminada, se pueden realizar un máximo de 10 pagos al mismo usuario por día, que se pueden configurar en la plataforma comercial: API Security

Otras Consideraciones

  • El monto del pago debe ser inferior o igual al monto del saldo disponible actual del comerciante;

A continuación, cargue el código, copie y pegue directamente y cambie los parámetros usted mismo.

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;
    }
}

uso del controlador

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' => '打款失败']);
    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43453621/article/details/131299984
Recomendado
Clasificación