>  기사  >  백엔드 개발  >  UnionPay 결제 인터페이스 PHP 버전 개발

UnionPay 결제 인터페이스 PHP 버전 개발

不言
不言원래의
2018-06-07 16:30:031843검색

이 글은 주로 PHP 버전 UnionPay 결제 인터페이스 개발 방법을 소개하며, PHP 버전 UnionPay 결제 인터페이스의 구체적인 프로세스와 관련 운영 기술을 예시 형식으로 분석합니다.

이 글은 다음과 같습니다. 기사에서는 PHP 버전의 UnionPay 결제 인터페이스 개발 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 정보는 다음과 같습니다.

이제 결제 인터페이스에 제3자 결제 인터페이스와 은행 결제 인터페이스가 포함됩니다. 여기에서는 UnionPay 결제 인터페이스의 PHP 버전을 개발하는 방법을 소개합니다.

UnionPay로 결제할 때는 먼저 두 가지 중요한 부분에 주의해야 합니다.

PHP 운영 환경이 5.4.18 이상입니다.

openssl 확장 프로그램이 활성화되었습니다.

개발 매뉴얼의 예시는 참고용일 뿐입니다. 기본적으로 모두 틀렸습니다. 데모를 보려면 공식 웹사이트로 이동하세요. . . 유니온페이 개발에는 테스트 키가 제공되지 않으며 공식 환경에서만 개발이 가능하다는 점 참고해주세요

다음은 제가 ThinkPHP를 이용해 작성한 결제 클래스입니다

/**
* 银联支付 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";
   }
  }
  }
 }
}

유니온페이 결제는 비교적 간단할 것 같아요! !

위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

관련 추천:

ThinkPHP는 WeChat 결제(jsapi 결제)를 구현합니다.

php 서버는 Alipay 앱 결제를 통합합니다.

위 내용은 UnionPay 결제 인터페이스 PHP 버전 개발의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.