Heim > Backend-Entwicklung > PHP-Tutorial > So implementieren Sie die Bezahlung von WeChat-Unternehmenskonten für Privatpersonen in PHP

So implementieren Sie die Bezahlung von WeChat-Unternehmenskonten für Privatpersonen in PHP

不言
Freigeben: 2023-04-01 16:40:02
Original
2708 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich die PHP-Methode zur Implementierung der WeChat-Unternehmenskontozahlung für Einzelpersonen vorgestellt und die Zahlungskonfiguration, die Zertifikatsnutzung und die zahlungsprozessbezogenen Betriebsfähigkeiten des PHP-WeChat-Unternehmenskontos detailliert analysiert

Das Beispiel in diesem Artikel beschreibt die Methode zur Verwendung von PHP zur Implementierung der WeChat-Unternehmenskontozahlung für Einzelpersonen. Teilen Sie es als Referenz mit allen. Die Einzelheiten lauten wie folgt:

Einführung: Händler, wie kann man bei Kleinstunternehmen Bargeld abheben?

Direkt mit WeChat bezahlen.

Die Implementierung ist wie folgt:

WeChat-Zahlungskonfiguration

/*微信支付*/
  'PAY_WEIXIN'        => array(
    'appid'         => 'XXXX',
    'appsecret'       => 'XXXXXXX',
    'mchid'         => '1283301801',                        //商户号
    'key'          => 'zhudianbaodiandodozhudianbao0527',             //商户支付秘钥
    'apiclient_cert'    => 'Conf/cert/apiclient_cert.pem',               //商户证书apiclient_cert.pem
    'apiclient_key'     => 'Conf/cert/apiclient_key.pem',                //商户证书apiclient_key.pem
  )
Nach dem Login kopieren

arrayToXml

/**
* array转xml
*/
function arrayToXml($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;
}
Nach dem Login kopieren

Verwenden Sie das Zertifikat, um die XML-Datei an zu senden die entsprechende Post-Methode-Schnittstellen-URL

/**
*  作用:使用证书,以post方式提交xml到对应的接口url
*/
function postXmlSSLCurl($xml, $url, $second, $cert, $key)
{
    $ch = curl_init();
    //超时时间
    curl_setopt($ch,CURLOPT_TIMEOUT,$second ? $second : $this->timeout);
    //这里设置代理,如果有的话
    //curl_setopt($ch,CURLOPT_PROXY, &#39;8.8.8.8&#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);
    //设置header
    curl_setopt($ch,CURLOPT_HEADER,FALSE);
    //要求结果为字符串且输出到屏幕上
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
    //设置证书
    //使用证书:cert 与 key 分别属于两个.pem文件
    //默认格式为PEM,可以注释
    curl_setopt($ch,CURLOPT_SSLCERTTYPE,&#39;PEM&#39;);
    curl_setopt($ch,CURLOPT_SSLCERT,$cert);
    //默认格式为PEM,可以注释
    curl_setopt($ch,CURLOPT_SSLKEYTYPE,&#39;PEM&#39;);
    curl_setopt($ch,CURLOPT_SSLKEY, $key);
    //post提交方式
    curl_setopt($ch,CURLOPT_POST, true);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
    $data = curl_exec($ch);
    //返回结果
    if($data){
      curl_close($ch);
      return $this->xmlToArray($data);
    }
    else {
      $error = curl_errno($ch);
      echo "curl出错,错误码:$error"."<br>";
      curl_close($ch);
      return false;
    }
}
Nach dem Login kopieren

Geschäftszahlung an Privatpersonen

//企业向个人付款
public function payToUser($params, $key, $apicent_cert, $apiclient_key) {
    $url = &#39;https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers&#39;;
    //检测必填参数
    if($params["partner_trade_no"] == null) {  //
      exit("退款申请接口中,缺少必填参数partner_trade_no!"."<br>");
    }elseif($params["openid"] == null){
      exit("退款申请接口中,缺少必填参数openid!"."<br>");
    }elseif($params["check_name"] == null){       //NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账)OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)
      exit("退款申请接口中,缺少必填参数check_name!"."<br>");
    }elseif(($params["check_name"] == &#39;FORCE_CHECK&#39; or $params["check_name"] == &#39;OPTION_CHECK&#39;) && ($params["re_user_name"] == null)){ //收款用户真实姓名。
      exit("退款申请接口中,缺少必填参数re_user_name!"."<br>");
    }elseif($params["amount"] == null){
      exit("退款申请接口中,缺少必填参数amount!"."<br>");
    }elseif($params["desc"] == null){
      exit("退款申请接口中,缺少必填参数desc!"."<br>");
    }
    $params["mch_appid"] = $this->appid;//公众账号ID
    $params["mchid"] = $this->mchid;//商户号
    $params["nonce_str"] = $this->createNoncestr();//随机字符串
    $params[&#39;spbill_create_ip&#39;] = $_SERVER[&#39;REMOTE_ADDR&#39;] == &#39;::1&#39; ? &#39;192.127.1.1&#39; : $_SERVER[&#39;REMOTE_ADDR&#39;];//获取IP
    $params["sign"] = $this->getSign($params, $key);//签名
    $xml = $this->arrayToXml($params);
    return $this->postXmlSSLCurl($xml, $url, false, $apicent_cert, $apiclient_key);
}
Nach dem Login kopieren

Geschäftszahlung

private function _enterprisePay($number, $member_id, $amount, $desc)
{
    // 获取openid
    $wxuser_id = M(&#39;Member&#39;)->where(array(&#39;id&#39; => $member_id))->getField(&#39;wxuser_id&#39;);
    $openid  = M(&#39;Wxuser&#39;)->where(array(&#39;id&#39; => $wxuser_id))->getField(&#39;openid&#39;);
    $pay = C(&#39;PAY_WEIXIN&#39;);
    import(&#39;@.Action.WxDevelop&#39;);
    $enterprise = new WxEnterprise($pay[&#39;appid&#39;], $pay[&#39;appsecret&#39;], $pay[&#39;mchid&#39;]);
    $params = array(
      &#39;partner_trade_no&#39; => $number,
      &#39;openid&#39; => $openid,
      &#39;check_name&#39; => &#39;NO_CHECK&#39;,
      &#39;amount&#39; => $amount, // 总计
      &#39;desc&#39; => $desc,
    );
    $result = $enterprise->payToUser($params, $pay[&#39;key&#39;], $pay[&#39;apiclient_cert&#39;], $pay[&#39;apiclient_key&#39;]);
    return $result;
}
Nach dem Login kopieren

Verarbeitung von Bargeldabhebungen durch Händler

private function _handle($truename, $price) { // 处理分销商提现
    $withdrawid = date("ymdHis") . strval(rand(1000, 9999));
    $data = array(&#39;withdrawid&#39; => $withdrawid, &#39;store_id&#39; => $this->store_id, &#39;member_id&#39; => $this->member_id, &#39;truename&#39; => $truename, &#39;price&#39; => $price, &#39;addtime&#39; => time());
    //免审核
    if ($price >= C(&#39;withdraw_uncheck_value&#39;)) {
      $data[&#39;need_check&#39;] = 0;
      $data[&#39;status&#39;] = 1;
      if ($this->withdrawModel->add($data)) {
        $result = $this->_enterprisePay($withdrawid, $this->member_id, $price * 100, &#39;分销商(&#39; . $truename . &#39;)提现&#39;);
        //遇到支付信息出错,转为需审核提现
        if ($result[&#39;return_code&#39;] != &#39;SUCCESS&#39;) {
          $this->withdrawModel->where(array(&#39;withdrawid&#39; => $withdrawid))->save(array(&#39;need_check&#39; => 1, &#39;status&#39; => 0));
          $this->assign(&#39;success&#39;, 2);
        }
        else {
          //设置微信交易号
          $this->withdrawModel->where(array(&#39;withdrawid&#39; => $withdrawid))->save(array(&#39;payment_no&#39; => $result[&#39;payment_no&#39;]));
          //增加佣金流水,待修复
          $data = array(&#39;store_id&#39; => $this->store_id, &#39;user_type&#39; => 2, &#39;user_id&#39; => $this->shop_id, &#39;trade_type&#39; => 2, &#39;trade_no&#39; => $withdrawid, &#39;price&#39; => -$price, &#39;status&#39;=> 1, &#39;message&#39; => $truename.&#39;提现&#39;, &#39;addtime&#39; => time());
          M(&#39;Twitter_log&#39;)->add($data);
          //减少相应可提佣金
          M(&#39;Member&#39;)->where(array(&#39;id&#39; => $this->member_id))->setInc(&#39;money&#39;, -$price);
          $this->assign(&#39;success&#39;, 1);
          //发送佣金变动消息
          import(&#39;@.Action.Tmplmsg&#39;);
          $tmplmsg = new Tmplmsg();
          $tmplmsg->send(Tmplmsg::PRICE_CHANGE, $this->member_id, array(&#39;token&#39; => $this->token, &#39;intro&#39; => &#39;分销佣金提现转出&#39;, &#39;price&#39; => $price, &#39;business&#39; => BUSINESS));
        }
      }
      else {
        $this->error(&#39;提现信息错误!&#39;);
      }
    }
    //需要审核
    else {
      $this->withdrawModel->add($data);
      $this->assign(&#39;success&#39; , 2);
    }
}
Nach dem Login kopieren

Bietet die Funktion der Unternehmenszahlung an Benutzer und unterstützt Corporate Pay über die API-Schnittstelle oder führt die Zahlung über die Webfunktion der WeChat Pay-Händlerplattform durch.

Warme Erinnerung:

◆ Wenn Sie eine Zahlung an denselben Benutzer mit echtem Namen vornehmen, beträgt das einzelne Tageslimit 2W/2W
◆ Wenn Sie eine Zahlung vornehmen eine Zahlung an denselben nicht echten Benutzer, der einzelne Das Tageslimit für eine einzelne Transaktion beträgt 2000/2000
◆ Das Gesamtzahlungslimit für einen Händler am selben Tag beträgt 100W
◆ Nur die APPID, die wurde an das Händlerkonto gebunden.
◆ Für die Zielbenutzer der Zahlung können Benutzer, die von WeChat Pay mit echtem Namen authentifiziert wurden, die Funktion zur Überprüfung des echten Namens nicht bereitstellen Verifizierung. Unternehmen können die Verifizierungsart entsprechend der Sicherheitsstufe ihres eigenen Unternehmens wählen.
◆ Der Zahlungsbetrag muss kleiner oder gleich dem Betrag des aktuell verfügbaren Guthabens des Händlers sein entsprechende Daten können über die Zahlungsabfrage des Unternehmens angezeigt werden.

Ankunft

Der Zahlungsbetrag wird in das Wechselgeld des Zielbenutzers (WeChat-Me-Wallet-Change) eingegeben. WeChat Pay benachrichtigt Sie über die Gutschrift des Wechselgeldes auf Ihrem Konto und zeigt im Wechselgeldbeleg und in den Ausgabendetails entsprechende Aufzeichnungen an.

Warme Erinnerung:

Bei der historischen Client-Version ohne Wechselkonto wird das Geld dem roten Umschlagkonto des Benutzers gutgeschrieben. Es erfolgt keine Nachricht von WeChat Pay, um den Benutzer und das Unternehmen zu benachrichtigen kann sich dafür entscheiden, den Benutzer selbst zu erreichen.

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

Ob ein Zertifikat erforderlich ist

Für die Anfrage ist ein Zwei-Wege-Zertifikat erforderlich .

Datenbeispiel:

<xml>
<mch_appid>wxe062425f740c30d8</mch_appid>
<mchid>10000098</mchid>
<nonce_str>3PG2J4ILTKCH16CQ2502SI8ZNMTM67VS</nonce_str>
<partner_trade_no>100000982014120919616</partner_trade_no>
<openid>ohO4Gt7wVPxIT1A9GjFaMYMiZY1s</openid>
<check_name>OPTION_CHECK</check_name>
<re_user_name>张三</re_user_name>
<amount>100</amount>
<desc>节日快乐!</desc>
<spbill_create_ip>10.2.3.10</spbill_create_ip>
<sign>C97BDBACF37622775366F38B629F45E3</sign>
</xml>
Nach dem Login kopieren

Erfolgreiches Beispiel:

<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[]]></return_msg>
<mch_appid><![CDATA[wxec38b8ff840bd989]]></mch_appid>
<mchid><![CDATA[10013274]]></mchid>
<device_info><![CDATA[]]></device_info>
<nonce_str><![CDATA[lxuDzMnRjpcXzxLx0q]]></nonce_str>
<result_code><![CDATA[SUCCESS]]></result_code>
<partner_trade_no><![CDATA[10013574201505191526582441]]></partner_trade_no>
<payment_no><![CDATA[1000018301201505190181489473]]></payment_no>
<payment_time><![CDATA[2015-05-19 15:26:59]]></payment_time>
</xml>
Nach dem Login kopieren

Fehlerbeispiel:

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[系统繁忙,请稍后再试.]]></return_msg>
<result_code><![CDATA[FAIL]]></result_code>
<err_code><![CDATA[SYSTEMERROR]]></err_code>
<err_code_des><![CDATA[系统繁忙,请稍后再试.]]></err_code_des>
</xml>
Nach dem Login kopieren
Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, das wird so sein Seien Sie für das Lernen aller nützlich. Bitte beachten Sie die chinesische PHP-Website für weitere verwandte Inhalte!

Verwandte Empfehlungen:

PHP implementiert die Unternehmenskonto-Verifizierungsschnittstelle der öffentlichen WeChat-Plattform

So verwenden Sie PHP zum Exportieren von Daten Taobao-Assistent CSV

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Bezahlung von WeChat-Unternehmenskonten für Privatpersonen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage