ホームページ > バックエンド開発 > PHPチュートリアル > PHP で銀聯決済インターフェースを開発する簡単な例の詳細な説明

PHP で銀聯決済インターフェースを開発する簡単な例の詳細な説明

墨辰丷
リリース: 2023-03-28 20:18:02
オリジナル
2670 人が閲覧しました

この記事では主に、PHP バージョンの銀聯決済インターフェースの開発方法を紹介し、サンプルの形で PHP 銀聯決済インターフェース開発の具体的なプロセスと関連操作テクニックを分析します。支払いインターフェースにサードパーティの支払いが追加されました このインターフェースには銀行の支払いインターフェースも追加されました。ここではPHP版銀聯決済インターフェースの開発方法を紹介します。


UnionPay の支払いについては、まず 2 つの重要な部分に注意する必要があります:

PHP 動作環境は 5.4.18 以降である

拡張機能 openssl が有効である

開発マニュアルの例は参考用です。基本的にすべて間違っています。公式 Web サイトにアクセスしてデモを試してみてください。 。 。 UnionPay の開発にはテスト キーが提供されておらず、公式環境でのみ開発できることに注意してください

以下は ThinkPHP を使用して作成した支払いクラスです

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

/**

* 银联支付 v0.1

* @auther:Summer<dengwz7788@gmail.com>;

* @date:20151202

* **/

class NetPayAction extends BaseAction{

//在类初始化方法中,引入相关类库

public function _initialize() {

 header("Content-type:text/html;charset=utf-8");

 vendor(&#39;Netpay.util.common&#39;,"",".php"); //导入加密核心文件夹

 vendor(&#39;Netpay.util.SecssUtil&#39;,"",".class.php"); //导入加密核心文件夹

 vendor(&#39;Netpay.util.Settings_INI&#39;,"",".php"); //导入加密核心文件夹

 vendor(&#39;Netpay.util.Settings&#39;,"",".php"); //导入加密核心文件夹

 $this->securityPropFile= $_SERVER[&#39;DOCUMENT_ROOT&#39;] . "/ThinkPHP/Extend/Vendor/Netpay/config/security.properties"; //谁知道这是啥,反正他们要我加的

 $this->b2cPaySend = __APP__."/Index/NetPay/b2cPaySend";

 $this->b2cRefundSend = __APP__."/Index/NetPay/b2cRefundSend";

 $this->b2cQuerySend = __APP__."/Index/NetPay/b2cQuerySend";

 $this->;MerBgUrl = __APP__."/Index/NetPay/MerBgUrl";

 $this->MerPageUrl = __APP__."/Index/NetPay/MerPageUrl";

}

public function index()

{

 $paramArray=array (

   &#39;MerId&#39; => &#39;商户号&#39;,

   &#39;MerOrderNo&#39; => &#39;0000001944663232&#39;,

   &#39;OrderAmt&#39; => &#39;1&#39;,

   &#39;TranDate&#39; => &#39;20151219&#39;,

  &#39;TranTime&#39; =>&#39;171248&#39;,

  &#39;TranType&#39; => &#39;0001&#39;,

  &#39;BusiType&#39; =>&#39;0001&#39;,

  &#39;Version&#39; => &#39;20140728&#39;,

  &#39;CurryNo&#39; => &#39;CNY&#39;,

  &#39;AccessType&#39; =>; &#39;0&#39;,

  &#39;CommodityMsg&#39; => &#39;测试商品1号&#39;,

  &#39;MerPageUrl&#39; => $this->MerBgUrl,

  &#39;MerBgUrl&#39; =>$this->MerPageUrl,

  &#39;MerResv&#39; => &#39;MerResv&#39;,

 );

 if (count($paramArray) >0) {

  $dispatchUrl = $this->b2cPaySend;

  $transResvedJson = array();

  $cardInfoJson = array();

  $sendMap = array();

   foreach ($paramArray as $key => $value) {

   if (isEmpty($value)) {

    continue;

   }

   if (startWith($key, "trans_")) {

     $key = substr($key, strlen("trans_"));

        $transResvedJson[$key] = $value;

   } else

     if (startWith($key, "card_")) {

       $key = substr($key, strlen("card_"));

       $cardInfoJson[$key] = $value;

     } else {

       $sendMap[$key] = $value;

     }

  }

  $transResvedStr = null;

  $cardResvedStr = null;

  if (count($transResvedJson) >0) {

   $transResvedStr = json_encode($transResvedJson);

  }

  if (count($cardInfoJson) > 0) {

   $cardResvedStr = json_encode($cardInfoJson);

  }

 $secssUtil = new SecssUtil();

 if (! isEmpty($transResvedStr)) {

  $transResvedStr = $secssUtil->decryptData($transResvedStr);

  $sendMap["TranReserved"] = $transResvedStr;

  }

 if (! isEmpty($cardResvedStr)) {

   $cardResvedStr = $secssUtil->decryptData($cardResvedStr);

   $sendMap["card_"] = $cardResvedStr;

  }

  $securityPropFile = $this>securityPropFile;

  $secssUtil->init($securityPropFile);

  $secssUtil->sign($sendMap);

  $sendMap["Signature"] = $secssUtil->getSign();

  $_SESSION = $sendMap;

  header("Location:" . $dispatchUrl);

 }

}

public function b2cPaySend(){

  layout(false);

  $settings = new Settings_INI();

  $settings->oad($this->securityPropFile);

  $pay_url = "https://payment.chinapay.com/CTITS/service/rest/page/nref/000000000017/0/0/0/0/0";

  $html = "<form name=&#39;payment&#39; action=&#39;{$pay_url}&#39; method=&#39;POST&#39; target=&#39;_blank&#39;>;";

  $params = "TranReserved;MerId;MerOrderNo;OrderAmt;CurryNo;TranDate;SplitMethod;BusiType;MerPageUrl;MerBgUrl;SplitType;MerSplitMsg;PayTimeOut;MerResv;Version;BankInstNo;CommodityMsg;Signature;AccessType;AcqCode;OrderExpiryTime;TranType;RemoteAddr;Referred;TranTime;TimeStamp;CardTranData";

  foreach ($_SESSION as $k =>$v) {

   if (strstr($params, $k)) {

     $html .= "<input type=&#39;hidden&#39; name = &#39;" . $k . "&#39; value =&#39;" . $v . "&#39;/>";

   }

  }

    $html .= "<nput type=&#39;button&#39; type=&#39;hidden&#39; value=&#39;提交订单&#39; >";

    $html .= "<;/from>";

    $this->html = $html;

    $this->display();

}

public function pgReturn(){

 if ($_POST) {

   if (count($_POST) > 0) {

    $secssUtil = new SecssUtil();

    $securityPropFile = $this>securityPropFile;

    $secssUtil->init($securityPropFile);

    $text = array();

    foreach($_POST as $key=>$value){

      $text[$key] = urldecode($value);

    }

   if ($secssUtil->verify($text)) {

            //支付成功

     $_SESSION["VERIFY_KEY"] = "success";

   } else {

    //支付失败

     $_SESSION["VERIFY_KEY"] = "fail";

   }

  }

  }

 }

}

ログイン後にコピー

UnionPay の支払いは比較的簡単なはずです。 !

要約: 上記がこの記事の全内容です。皆様の学習に役立つことを願っています。

関連する推奨事項:

php WeChat決済の返金機能の実装

phpAlipayシリーズのコンピュータウェブ決済

phpphpのパフォーマンス分析-fpm の実行が遅い 方法スローログを使用するには

以上がPHP で銀聯決済インターフェースを開発する簡単な例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート