>  기사  >  백엔드 개발  >  PHP로 UnionPay 결제 인터페이스를 개발하는 간단한 예에 대한 자세한 설명

PHP로 UnionPay 결제 인터페이스를 개발하는 간단한 예에 대한 자세한 설명

墨辰丷
墨辰丷원래의
2018-06-01 09:37:562612검색

본 글은 주로 PHP 버전의 UnionPay 결제 인터페이스 개발 방법을 소개하고, PHP UnionPay 결제 인터페이스 개발의 구체적인 프로세스와 관련 운영 기법을 예시 형식으로 분석해 도움이 필요한 친구들이 참고할 수 있습니다

이제 결제 인터페이스에 제3자 결제 기능이 있습니다. 인터페이스에는 은행 결제 인터페이스도 있습니다. 여기에서는 유니온페이 결제 인터페이스의 PHP 버전을 개발하는 방법을 소개하겠습니다.

UnionPay 결제를 위해서는 먼저 두 가지 중요한 부분에 주의해야 합니다.

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

openssl 확장 기능이 활성화되었습니다.

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

다음은 제가 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";
   }
  }
  }
 }
}

UnionPay 결제는 비교적 간단해야 합니다! !

요약: 위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

관련 추천:

phpWeChat 결제의 환불 기능 구현

phpAlipay 시리즈 컴퓨터 웹사이트 결제

phpphp 성능 분석 -fpm 느린 실행 방법 느린 로그를 사용하려면

위 내용은 PHP로 UnionPay 결제 인터페이스를 개발하는 간단한 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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