위챗 결제-기업에서 개인 잔돈으로 결제-개인 현금 인출 기능-사고방식

6368 단어
본고는 위챗 결제-기업 결제에서 개인 잔돈-개인 현금 인출 기능에 대한 사고방식을 공유한다. 그림은 다음과 같다.

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,$money*100,' ');

       // 
     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' => ' ~',

            ]);
        }
  }

3. 지불 방법

/**
* 
/
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 
/
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
"; die(); curl_close($ch); return false; } }
/**
  * array   xml
 *  
*/
public function array_to_xml($arr){
  $xml = "";
   foreach ($arr as $key => $val) {
     if (is_numeric($val)) {
        $xml .= "".$val."".$key.">";
     } else
      $xml .= "".$key.">";
    }
   $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;
    }

텍스트 링크:https://blog.csdn.net/qd55815634/article/details/78541491

좋은 웹페이지 즐겨찾기