ホームページ バックエンド開発 PHPチュートリアル WeChat エンタープライズ アカウントを使用して個人に支払う方法に関する PHP のコード例

WeChat エンタープライズ アカウントを使用して個人に支払う方法に関する PHP のコード例

Jul 26, 2017 pm 02:54 PM
php 支払う

この記事では主にPHPで個人向けWeChatエンタープライズアカウント決済を実装する方法を紹介し、PHP WeChatエンタープライズアカウントの支払い設定、証明書の使用法、支払いプロセス関連の操作スキルを詳細に分析します。必要な友人は参考にしてください。この記事では、php の例を説明して、WeChat ビジネス アカウントで個人支払いを実装する方法を説明します。参考までに皆さんと共有してください。詳細は次のとおりです:

はじめに:

流通業者の皆様、零細企業から現金を引き出すにはどうすればよいですか? WeChat で直接支払います。

実装は次のとおりです:

WeChat支払い設定

/*微信支付*/
  '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
  )
ログイン後にコピー

arrayTo Payment

/**
* 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;
}
ログイン後にコピー

Enterprise Payment

/**
*  作用:使用证书,以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;
    }
}
ログイン後にコピー

ディストリビューターの引き出しを処理します

//企业向个人付款
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);
}
ログイン後にコピー

の機能を提供します企業がユーザーに支払いを行うこと、企業が API インターフェイスを介して支払いを行うこと、または WeChat Pay マーチャント プラットフォームの Web 機能を介して支払いを操作することをサポートすることです。

注意喚起:


◆ 同じ実名ユーザーへの支払いの場合、1 日あたりの 1 回の制限は 2W/2W です

◆ 同じ非実名ユーザーへの支払いの場合、1 回の 1 日の制限は 2000/ 2000
◆ 1 つの加盟店からの同日支払いの場合、合計制限は 100W です

◆ 加盟店アカウントに紐付けられた APPID のみがサポートされます

◆ 支払いの対象ユーザーは、WeChat Pay で認証されたユーザーです。実名認証では、実名認証されていないユーザーは認証することができません。企業は、ビジネスのセキュリティ レベルに応じて認証タイプを選択できます。販売者の現在の利用可能残高以下。
◆ 有料レコードの場合、企業は企業支払い照会を通じて対応するデータを表示できます。

到着

支払い資金が対象ユーザーの小銭(WeChat-Me-Wallet-Change)に入金されます。 WeChat Pay は、お釣りがアカウントに入金されたことを通知し、お釣りの受領書と支出の詳細には対応する記録が表示されます。 注意事項:

変更口座のない過去のクライアント バージョンの場合、資金はユーザーの赤い封筒アカウントに入力されます。WeChat Pay からユーザーに通知するメッセージはなく、企業はユーザーに連絡することを選択できます。それ自体の。

証明書は必要ですか?


リクエストには双方向の証明書が必要です。

データの例:

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;
}
ログイン後にコピー

成功の例:

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);
    }
}
ログイン後にコピー

エラーの例:

<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>
ログイン後にコピー

以上がWeChat エンタープライズ アカウントを使用して個人に支払う方法に関する PHP のコード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles