PHP を使用してクイック入金機能を実装する (インターフェイスを含む)_PHP チュートリアル
このプロジェクトはzendフレームワークを使用して実装されています
modules/default/controllers/IndexController.php
IndexController.php
*orderId 注文番号、データベーステーブルの主キー (一意)。 //必要なフィールド
*usr_idtype 必要に応じてドキュメント タイプ。
*usr_idcode ID 番号、必要に応じて。
*etx_status が割引されるかどうかは、ニーズによって異なります。
*time_create は、独自のニーズに応じて、優先時間を満たしているかどうかを確認します。
*ets_license パッケージ コードは、ニーズに応じた製品カテゴリのようなものです。
*contact_type 連絡先タイプ、固定選択値 1、2。1 つの電子メール、2 つの携帯電話番号、必要に応じて、ドル側は空にすることができます。
*contact_text 連絡先情報。 contact_type に従って入力します。必要に応じて、ドル側は空にすることができます。
*あなたのニーズに応じてパッケージ価格と製品価格を設定します。
*orderPrice はお客様のニーズに基づいた実際の価格です。
*orderAmount は注文の実際の支払い金額であり、これには手数料がかかります。 //必須フィールド
*orderTime 注文時間。 //必須フィールド
*paySuccess 注文が正常に支払われたかどうか。 // 必須フィールド b *Buysuccess アカウントは成功し、注文の支払い時間はニーズに応じて成功します。 // 必須フィールド 总 *要するに、必須フィールドは注文に関連しています
*Orderid、Orderamount、Ordertime、リクエストに必要なフィールド
Paysuccess、Paytime レスポンスに必要なフィールド
*/
$ Mockorder = ARRRR ay ();) $MockOrder['orderId'] = '100000125'; --必須
$MockOrder['usr_idtype'] = '1';//書類の種類、ID カード
$MockOrder['usr_idcode'] = '371111199011111111';//ID カード番号
$MockOrder['etx_status'] = '0';//割引か否か
$MockOrder['time_create'] = '1352338189';//時間が割引かどうかを検証
$MockOrder['ets_license'] = '1';//パッケージコードと製品カテゴリ
$MockOrder['contact_type'] = '1';//連絡先情報タイプ 1、電子メール
$MockOrder['contact_text'] = 'x@163.com';//連絡先情報、電子メール
$ MockOrder['etsPrice'] = '30800';//パッケージ価格と商品価格
$MockOrder['orderPrice'] = '30800';//実際の価格
$MockOrder['orderAmount'] = '31100';//注文に対して支払われた実際の価格に手数料を加えたもの。 --Necessary
$MockOrder['orderTime'] = '1352338199';// 注文の生成時間。 --Necessary
$MockOrder['paySuccess'] = '0';//注文が正常に支払われたかどうか。 --Necessary
$MockOrder['buySuccess'] = '0';//アカウントが正常に生成されたかどうか
$MockOrder['payTime'] = '0';//注文の支払い時間。--Necessary
//BillRequest は Kuaiqian に必要なパラメータです
$this->view->BillRequest = new Application_Model_BillRequest($MockOrder);
Zend_Debug::dump($this->view- >BillRequest) ;exit;
}
//bgUrl アドレスはここを指します
public function acceptAction()
{
//データベース設計を受信します
/* $MockReceive 配列を使用してシミュレートします
* $MockReceive = array();
* $MockReceive[ 'id'] 主キー;
* $MockReceive['orderId'] 販売者注文番号;
* $MockReceive['receiveTime'] 受付時間;
* $MockReceive['queryString']http_build_encode($_REQUEST);
* $ MockReceive['dealId'] Kuaiqian 取引番号;
* $MockReceive['bankDealId'] 銀行取引番号;
* $MockReceive['payResult'] 処理結果 10: 支払い成功; 11: 支払い失敗;
* $MockReceive[' dealTime'] 高速送金取引時間;
* $MockReceive['payAmount'] 注文の実際の支払い金額;
* $MockReceive['fee'] 料金;
* $MockReceive['errCode'] エラー コード;
* /
/*$_REQUEST は Kuaiqian によって返されたデータです
* version ゲートウェイのバージョン、固定値: v2.0、注文送信時のゲートウェイのバージョン番号と一致します。
* 言語 Web ページに表示される言語タイプ (1 中国語表示) は、注文送信時に Web ページに表示される言語タイプと一致します
* SignType 署名タイプ、4PKI 署名、注文送信時の署名タイプと一致します
* payType 支払い方法、00 all、注文送信時の支払い方法と一致していること
* BankId 銀行コード
* orderId 販売者注文番号、注文送信時の販売者注文番号と一致していること
* orderTime 販売者注文送信時間は、注文が送信されたときの販売者の注文送信時間と一致するようにしてください
* orderAmount は販売者の注文金額であり、注文が送信されたときの販売者の注文金額と一致します。
* dealId ファーストマネー取引番号
* BankDealId 銀行取引番号
ext2 拡張フィールド 2、注文送信時の拡張フィールド 2 と一致
* payResult 処理結果 10: 支払い成功; 11: 支払い失敗
* errCode エラー コード。空であること
* SignMsg 署名文字列
*/
$BillResponse = new Application_Model_BillResponse($_REQUEST);
//$BillResponse->checkSignMsg は、バグなどを防ぐために署名文字列が正しいかどうかを検証します。
if($BillResponse-> ;checkSignMsg){
//注文の支払いが成功したかどうかを判断します
if( $BillResponse->isSuccess){
//Kuaiqian に戻ります。Kuaiqian はリダイレクト URL アドレスに従って新しいページにジャンプします。これが成功ページです。
Return "
}else{
//Kuaiqian に戻り、Kuaiqian は次の場所にジャンプしますリダイレクト URL アドレスに基づく新しいページ。これは失敗ページです
return "
}
}
//Kuaiqian に戻ります。Kuaiqian はリダイレクト URL アドレスに従って新しいページにジャンプします。これは失敗ページです
return "
modules/default/views/scripts/index/index.phtml
https://www.99bill.com/gateway/recvMerchantInfoAction.htm
BillRequest;?>
<script><BR>document.getElementById('kqPay').click();<BR></script>
models/BillRequest .php
BillRequest.php
class Application_Model_BillRequest
{
public function __construct($MockOrder){
/*
* RMB ゲートウェイ アカウント。
*最初の方法: アカウントは 11 桁の人民元ゲートウェイ加盟店番号 + 01 です。このパラメータは必須です。 01 は中国工商銀行に相当します。
*2 番目の方法: アカウントは 16 桁の人民元ゲートウェイ加盟店です
*/
$this->merchantAcctId = "1001011111101"
// サーバーが支払い結果を受け取るバックエンド アドレス。このパラメーターは入力する必要があります。絶対パス // 空にすることはできません。
$this->bgUrl = "http://99bill/default/index/receive";
//販売者の注文番号、以下は注文番号を定義するために時間を使用します。販売者は定義ルールに従ってこの値を定義できます自分自身の注文番号 // 空にすることはできません。
$this->orderId = 'TOLPC'.sprintf("%09d", $MockOrder['orderId']);
//注文金額、金額は「セント」単位で、販売者テストは 1 でテストできますポイント、大量のテストは行わないでください。このパラメーターは必須です//空にすることはできません
$this->orderAmount =$MockOrder['orderAmount'];
//注文送信時刻、形式: yyyyMMddHHmmss、例: 20071117020101 //空ではありません。
$this->orderTime = date("YmdHis", $MockOrder['orderTime']);
//支払人名、空でも構いません。
$this->payerName= "";
//支払者の連絡先タイプ、1 は電子メールを表します。2 は携帯電話の連絡先を表します。空でも構いません。
$this->payerContactType = "";
//payerContactType 設定に対応する支払者の連絡先情報。payerContactType が 1 の場合は電子メール アドレスを入力し、payerContactType が 2 の場合は携帯電話番号を入力します。空でも構いません。
$this->payerContact = "";
//商品名、空でも構いません。
$this->productName= "TOLPC";
// 製品数量。空でも構いません。
$this->productNum = "1";
//製品コードは空でもかまいません。
$this->productId = $MockOrder['ets_license'];
// 製品の説明。空でも構いません。
$this->productDesc = "";
//支払い方法 (通常は 00) はすべての支払い方法を表します。銀行に直接接続されている販売者の場合、値は 10 で、必須です。 // 空にすることはできません
$this->payType = "00";
// エンコード方式、1 は UTF-8 を表し、2 は GBK を表します。 3 は GB2312 を表します。デフォルトは 1、このパラメータは必須です//空にすることはできません
$this->inputCharset = "1";
//ゲートウェイのバージョン、固定値: v2.0、このパラメータは必須です//空にすることはできませんempty
$this ->version = "v2.0";
//言語タイプ、1 は中国語表示を表し、2 は英語表示を表します。デフォルトは 1 で、このパラメータは必須です//空にすることはできません
$this-> language = "1";
//署名タイプ、値は 4、PKI 暗号化方式を表します、このパラメータは必須です//空にすることはできませんbe empty
$this->signType = "4";
//支払い結果を受け取るページのアドレス。通常、このパラメータは空のままです。
$this->pageUrl = "";
//拡張フィールド 1。販売者は必要なパラメーターを渡すことができ、支払い後に元の値が返されます (空にすることもできます)。
$this->ext1 = $MockOrder['orderId'];
//段落 2 から拡張して、販売者は必要なパラメーターを渡すことができ、支払い後に元の値が返されます (空にすることもできます)。
$this->ext2 = $MockOrder['orderTime'];
//銀行コード。payType が 00 の場合、この値は空でもかまいません。payType が 10 の場合、この値は入力する必要があります。銀行を参照してください。詳細についてはリストをご覧ください。
$this->bankId = "";
//同じ注文の再送信は禁止されています。物理的なショッピング カートには 1 を入力し、仮想商品には 0 を入力します。1 は 1 回のみ送信できることを意味し、0 は送信できることを意味します。支払いが失敗した場合は再提出できます。空でも構いません。
$this->redoFlag = "";
//クイック マネー パートナーの口座番号、つまり販売者番号は空でもかまいません。
$this->pid = "";
//Kuaiqian によって提供されるリクエスト パラメーター。
$KeyOrders = array('inputCharset','pageUrl','bgUrl','version',' language','signType','merchantAcctId','payerName','payerContactType','payerContact',
'orderId' ,'orderAmount','orderTime','productName','productNum','productId','productDesc','ext1','ext2','payType','bankId','redoFlag','pid',) ;
//Kuaiqian によって提供されたリクエスト パラメーターの値が空かどうかを判断し、空でないパラメーターと値を配列に再編成します
foreach($KeyOrders as $key){
if(''== $this-> {$key}){Continue;}
$params[$key] = $this->{$key};
}
//http_build_query() は URL エンコード後にリクエスト文字列を生成します
/ /urldecode() エンコードされていない文字列を復元します
//getSignMsg() PKI 暗号化、MD5 暗号化も使用できます
//MD5 暗号化方式 strtoupper(md5(urldecode(http_build_query($params)))); これはもう一般的には使用されません。
//一般的に使用される PKI 暗号化技術
$this->signMsg = $this->getSignMsg(urldecode(http_build_query($params)));
}
//PKI 暗号化技術
public function getSignMsg($param) {
//99bill-rsa.pem は Kuaiqian の CA 証明書です
// ローカルでランダムに KEY を生成し、この KEY を使用してデータを暗号化します KEY は $priv_key_id
$priv_key_id = openssl_get_privatekey(file_get_contents("99bill-rsa.pem" , " r"));
//$priv_key_id を使用して $param データを暗号化します。
//SHA1 ハッシュ暗号化に続いて $priv_key_id 秘密鍵暗号化を使用して、署名文字列 $param を計算します。データ自体は暗号化されません。
openssl_sign($param, $signMsg, $priv_key_id, OPENSSL_ALGO_SHA1);
//$priv_key_id をストレージから解放します
openssl_free_key($priv_key_id);
//base64 を使用してデータをエンコードします
returnbase64_encode($signMsg);
} }
models/BillResponse.phpBillResponse.php
{
/*
* __construct ()コンストラクター
* 19 個のパラメーターと値を生成します。1 つのパラメーターは空の値を持つ可能性があり、$this->errCode の値は空である可能性があります
*/
public function __construct($response){
$KeyOrders = array('merchantAcctId ', 'version',' language','signType','payType','bankId','orderId','orderTime','orderAmount',
'dealId','bankDealId','dealTime','payAmount' ,'fee','ext1','ext2','payResult','errCode', 'signMsg');
foreach($KeyOrders as $key){
$this->{$key} = $response[ $key ];
}
}
/*
* 署名文字列を確認します
* Kuaiqian によって返される署名文字列は $this->signMsg です
* Base64 を使用して前の文字列をデコードします
* Kuaiqian によって指定されたパブリック アドレスを確認します鍵の検証
* Kuaiqian は秘密鍵暗号化を使用して $this->signMsg を生成しました
* Kuaiqian は秘密鍵に対応する公開鍵を私たちに提供し、私たちはこの公開鍵を使用して検証しました。成功の場合は 1、失敗の場合は 0、エラーの場合は -1。
*/
public function checkSignMsg(){
$KeyOrders = array('merchantAcctId','version',' language','signType','payType','bankId','orderId','orderTime','orderAmount ',
'dealId','bankDealId','dealTime','payAmount','fee','ext1','ext2','payResult','errCode',);
foreach($KeyOrders as $key) {
if(''==$this->{$key}){Continue;}
$params[$key] = $this->{$key};
}
//$pub_key_id 公開鍵
$pub_key_id = openssl_get_publickey(file_get_contents("99bill-rsa.cer", "r"));
return openssl_verify(urldecode(http_build_query($params)), Base64_decode($this->signMsg), $pub_key_id); }
public function isSuccess(){
//$this->payResult は成功した場合は 10、失敗した場合は 11 です
return '10'==$this->payResult;
}
public function getOrderId(){
return str_replace ( 'XXX', '', $this->orderId);
}
}
公開鍵と秘密鍵が必要です。これはペアではありません
両方とも半分です
99bill-rsa.cer
99bill-rsa.pem

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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