Heim >Backend-Entwicklung >PHP-Tutorial >PHP erkennt, dass sich die WeChat-Unternehmenszahlung ändert

PHP erkennt, dass sich die WeChat-Unternehmenszahlung ändert

王林
王林nach vorne
2020-01-29 20:29:303898Durchsuche

PHP erkennt, dass sich die WeChat-Unternehmenszahlung ändert

Wir wissen, dass die Enterprise-Payment-to-Change-Funktion von WeChat Pay weit verbreitet ist, z. B. WeChat-Prämien mit roten Umschlägen, Geschäftsabwicklung usw. Führen Sie Zahlungen an Privatpersonen über Unternehmen durch, und der Zahlungsbetrag wird direkt dem WeChat-Konto des Benutzers gutgeschrieben. Wie implementieren wir diese Funktion?

1. Aktivierungsbedingungen

PHP erkennt, dass sich die WeChat-Unternehmenszahlung ändert

(kostenloses Teilen von Lernvideo-Tutorials: PHP-Video-Tutorial)

Zahlungsguthaben

Enterprise Payment zum Wechseln von Guthaben verwendet den Saldo des Händlerkontos.

Je nach Kontoeröffnungsstatus des Händlerkontos unterscheidet sich das tatsächliche Auszahlungskonto:

◆ Standardmäßig beträgt der Saldo des Basiskontos (oder Saldokontos) des Händlerkontos wird verwendet, wenn das Unternehmen das Wechselgeld zahlt. Wenn das Händlerkonto ein Betriebskonto eröffnet hat, kann das Unternehmen das Guthaben auf dem Betriebskonto zur Begleichung des Wechselgeldes verwenden.

◆ Die Geldquelle für das Basiskonto (oder andere oben genannte Abhebungskonten) können Transaktionsabrechnungsgelder (nur Basiskonto) oder Gelder zum Aufladen des Kontos sein. Wenn das Guthaben des Abhebungskontos nicht ausreicht, schlägt die Zahlung aufgrund des unzureichenden Guthabens fehl.

Zahlungsregeln

Zahlungsmethode

◆ Unterstützt API-Schnittstelle oder Webseitenbetrieb, Zahlung an Zielbenutzer.

Angabe der Zahlungsbenutzeridentität

◆ Geben Sie den Zahlungsbenutzer über APPID+OPENID an.

◆ Die APPID muss die APPID sein, die bei der Beantragung eines Händlerkontos verwendet wird, oder an das Händlerkonto gebunden sein.

◆ Wie Sie OPENID erhalten, finden Sie hier: https://developers.weixin.qq.com/doc/offiaccount/User_Management/Get_users_basic_information_UnionID.html#UinonId

Zahlungslimit

◆ Zahlungen an Benutzer, die keinen echten Namen haben, werden nicht unterstützt

◆ Für Zahlungen an denselben Benutzer mit echtem Namen gilt ein einziges Tageslimit von 2W/2W

◆ Das Gesamtzahlungslimit für einen Händler am selben Tag beträgt 1 Million

Hinweis: Die Grenzen von 20.000 und 1 Million in den oben genannten Regeln gelten nicht Aufgrund der Beziehung zwischen Berechnungsregeln und Risikokontrollstrategien ist der Betrag nur als Referenz zu verstehen. Bitte verlassen Sie sich bei der Systemverarbeitung nicht auf die tatsächlichen Rendite- und Abfrageergebnisse.

Überprüfung der Identität des Zahlungsbenutzers

◆ Stellen Sie eine Funktion bereit, um den echten Namen des Zielbenutzers für die Zahlung zu überprüfen

Zahlungsstatus abfragen

◆ Für Zahlungsaufzeichnungen können Unternehmen die entsprechenden Daten über eine Unternehmenszahlungsabfrage überprüfen oder den Cashflow des Händlerkontos abfragen.

Zahlungshäufigkeit

◆ Standardmäßig können Zahlungen bis zu 10 Mal am Tag an denselben Benutzer erfolgen, was in der Händlerplattform-API festgelegt werden kann Sicherheit

Sonstige Hinweise

◆ Der Zahlungsbetrag muss kleiner oder gleich dem aktuell verfügbaren Guthaben des Händlers sein;

2. Schnittstellenadresse

Schnittstellenlink: https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers

Anfrageparameter:

Weitere Informationen finden Sie in der offiziellen Beschreibung des Enterprise Payment Development-Dokuments

PHP erkennt, dass sich die WeChat-Unternehmenszahlung ändert

1. Grundkonfiguration

//公众账号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

/**
**开始支付
/
 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([
   &#39;status&#39; => 2,
   &#39;message&#39; => &#39;提现金额不能小于1元&#39;,
   &#39;code&#39;=>&#39;提现金额太低&#39;
  ]);
  }else{
 $openid = $this->openid;
 $trade_no = date(&#39;YmdHis&#39;).mt_rand(1000,9999);
 $res = $this->pay($openid,$trade_no,$money*100,&#39;微信提现&#39;);

 //结果打印
 if($res[&#39;result_code&#39;]=="SUCCESS"){

   echo json_encode([
   &#39;status&#39; => 3,
   &#39;message&#39; => &#39;提现成功!&#39;,
   ]);
  }elseif ($res[&#39;err_code&#39;]=="SENDNUM_LIMIT"){
   echo json_encode([
   &#39;status&#39; => 4,
   &#39;message&#39; => &#39;提现失败!&#39;,
   &#39;code&#39;=>&#39;每日仅能提现一次&#39;,
   ]);
  }else{
   echo json_encode([
   &#39;status&#39; => 5,
   &#39;message&#39; => &#39;提现失败!&#39;,
   &#39;code&#39;=>$res[&#39;err_code&#39;],
   ]);
  }
  }
 }else{
  echo json_encode([
  &#39;status&#39; => 5,
  &#39;message&#39; => &#39;未检测到您当前微信账号~&#39;,

  ]);
 }
 }

Zahlungsmethode:


/**
*支付方法
/
public function pay($openid,$trade_no,$money,$desc){
 $params["mch_appid"]=&#39;&#39;; 
 $params["mchid"] = &#39;&#39;; 
 $params["nonce_str"]= &#39;suiji&#39;.mt_rand(100,999); 
 $params["partner_trade_no"] = $trade_no;  
 $params["amount"]= $money;  
 $params["desc"]= $desc;  
 $params["openid"]= $openid;  
 $params["check_name"]= &#39;NO_CHECK&#39;; 
 $params[&#39;spbill_create_ip&#39;] = $_SERVER[&#39;SERVER_ADDR&#39;]; 

 //生成签名
 $str = &#39;amount=&#39;.$params["amount"].&#39;&check_name=&#39;.$params["check_name"].&#39;&desc=&#39;.$params["desc"].&#39;&mch_appid=&#39;.$params["mch_appid"].&#39;&mchid=&#39;.$params["mchid"].&#39;&nonce_str=&#39;.$params["nonce_str"].&#39;&openid=&#39;.$params["openid"].&#39;&partner_trade_no=&#39;.$params["partner_trade_no"].&#39;&spbill_create_ip=&#39;.$params[&#39;spbill_create_ip&#39;].&#39;&key=商户密钥&#39;;

 //md5加密 转换成大写
 $sign = strtoupper(md5($str));
 //生成签名
 $params[&#39;sign&#39;] = $sign;

 //构造XML数据
 $xmldata = $this->array_to_xml($params); //数组转XML
 $url=&#39;https://api.mch.weixin.qq.com/mmpaymkttransfers/prom otion/transfers&#39;;

 //发送post请求
 $res = $this->curl_post_ssl($url, $xmldata); //curl请求 
 if(!$res){
 return array(&#39;status&#39;=>1, 
   &#39;msg&#39;=>"服务器连接失败" );
 }

 //付款结果分析
 $content = $this->xml_to_array($res); //xml转数组
 return $content;
 }

Curl-Anfrage


/**
* 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, &#39;10.206.30.98&#39;);
 //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,&#39;PEM&#39;);
//绝对地址可使用 dirname(__DIR__)打印,如果不是绝对地址会报 58 错误
 curl_setopt($ch,CURLOPT_SSLCERT,&#39; 绝对地址/apiclient_cert.pem&#39;);
 curl_setopt($ch,CURLOPT_SSLKEYTYPE,&#39;PEM&#39;);
 curl_setopt($ch,CURLOPT_SSLKEY,&#39;绝对地址/apiclient_key.pem&#39;);
 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\n";
 die();
 curl_close($ch);
 return false;
 }
 }

Signatur generieren


/**
 * array 转 xml
 * 用于生成签名
*/
public function array_to_xml($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;
 }

/**
* xml 转化为array
*/
public function xml_to_array($xml){
 //禁止引用外部xml实体
 libxml_disable_entity_loader(true);
 $values = json_decode(json_encode(simplexml_load_string($xml, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA)), true);
 return $values;
 }

Das Ergebnis ist wie in dargestellt die Abbildung:

PHP erkennt, dass sich die WeChat-Unternehmenszahlung ändert

Verwandte empfohlene Artikel-Tutorials:

PHP-Tutorial

Das obige ist der detaillierte Inhalt vonPHP erkennt, dass sich die WeChat-Unternehmenszahlung ändert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen