<?php header('Content-type: text/html; charset=gbk'); include_once("netpayclient_config.php"); ?> <title>支付交易</title> <?php //加載 netpayclient 組件 include_once("netpayclient.php"); //導入私鑰文件, 返回值即為您的商戶號,長度15位 $merid = buildKey(PRI_KEY); if(!$merid) { echo "導入私鑰文件失敗!"; exit; } //訂單號跟商戶號的關系: //商戶提交給ChinaPay的交易訂單號,訂單號的第五至第九位必須是商戶號的最后五位 //生成訂單號,定長16位,任意數字組合,一天內不允許重復,必填 $ordid = ecshopsn2chinapaysn(date('Ymd').mt_rand(10000,99999),$merid); //訂單金額,定長12位,以分為單位,不足左補0,必填 $transamt = formatamount(0.01); //貨幣代碼,3位,境內商戶固定為156,表示人民幣,必填 $curyid = "156"; //訂單日期,本例采用當前日期,必填 $transdate = date('Ymd',time()); //交易類型,0001 表示支付交易,0002 表示退款交易 $transtype = "0001"; //接口版本號,有兩個支付版本: 20070129、20040916,客戶是808080開頭的,就用04版本,必填 $version = "20040916"; //頁面返回地址(您服務器上可訪問的URL),最長80位,當用戶完成支付后,銀行頁面會自動跳轉到該頁面,並POST訂單結果信息,可選 $pagereturl = "$site_url/netpayclient_order_feedback.php"; //后台返回地址(您服務器上可訪問的URL),最長80位,當用戶完成支付后,我方服務器會POST訂單結果信息到該頁面,必填 $bgreturl = "$site_url/netpayclient_order_feedback.php"; /************************ 頁面返回地址和后台返回地址的區別: 后台返回從我方服務器發出,不受用戶操作和瀏覽器的影響,從而保證交易結果的送達。 ************************/ //支付網關號,4位,上線時建議留空,以跳轉到銀行列表頁面由用戶自由選擇,本示例選用0001農商行網關便於測試,可選 $gateid = ""; //備注,最長60位,交易成功后會原樣返回,可用於額外的訂單跟蹤等,可選 $priv1 = "memo"; //官方手冊有兩種簽名方式: //04的應該是第二種 //第一種: //按次序組合訂單信息為待簽名串 //$plain = $merid . $ordid . $transamt . $curyid . $transdate .$transtype.$priv1; //生成簽名值,必填 //$chkvalue = sign($plain); //第二種: //生成簽名值,必填 $chkvalue = signOrder($merid,$ordid,$transamt,$curyid,$transdate,$transtype); if (!$chkvalue) { echo "簽名失敗!"; exit; } ?> <?php /* *本地訂單號轉為銀聯訂單號 */ function ecshopsn2chinapaysn($order_sn, $vid){ if($order_sn && $vid){ $sub_vid = substr($vid, 10, 5); $sub_start = substr($order_sn, 2, 4); $sub_end = substr($order_sn, 6); $temp = $pay_id; return $sub_start . $sub_vid . $sub_end; } } /* *銀聯訂單號轉為本地訂單號 */ function chinapaysn2ecshopsn($chinapaysn){ if($chinapaysn){ $year = date('Y',time()); return substr($year,0,2) . substr($chinapaysn, 0, 4) . substr($chinapaysn, 9) ; } } /* *格式化交易金額,以分位單位的12位數字。 */ function formatamount($amount){ if($amount){ if(!strstr($amount, ".")){ $amount = $amount.".00"; } $amount = str_replace(".", "", $amount); $temp = $amount; for($i=0; $i< 12 - strlen($amount); $i++){ $temp = "0" . $temp; } return $temp; } } ?> <p> 本接口需要 mcrypt 和 bcmath 兩個PHP擴展庫的支持,請查看<a href="phpinfo.php" target="_blank">配置</a></p> <h1>支付交易</h1> <h5><a href="javascript:window.location.reload()">刷新本頁以改變訂單號</a></h5> <form action="<?php echo REQ_URL_PAY; ?>" method="post" target="_blank"> <label>商戶號</label><br/> <input type="text" name="MerId" value="<? echo $merid; ?>" readonly /><br/> <label>訂單號</label><br/> <input type="text" name="OrdId" value="<? echo $ordid; ?>" readonly/><br/> <label>訂單金額</label><br/> <input type="text" name="TransAmt" value="<? echo $transamt; ?>" readonly/><br/> <label>貨幣代碼</label><br/> <input type="text" name="CuryId" value="<? echo $curyid; ?>" readonly/><br/> <label>訂單日期</label><br/> <input type="text" name="TransDate" value="<? echo $transdate; ?>" readonly/><br/> <label>交易類型</label><br/> <input type="text" name="TransType" value="<? echo $transtype; ?>" readonly/><br/> <label>支付版本號</label><br/> <input type="text" name="Version" value="<? echo $version; ?>" readonly/><br/> <label>后台返回地址</label><br/> <input type="text" name="BgRetUrl" value="<? echo $bgreturl; ?>"/><br/> <label>頁面返回地址</label><br/> <input type="text" name="PageRetUrl" value="<? echo $pagereturl; ?>"/><br/> <label>網關號</label><br/> <input type="text" name="GateId" value="<? echo $gateid; ?>"/><br/> <label>備注</label><br/> <input type="text" name="Priv1" value="<? echo $priv1; ?>" readonly/><br/> <label>簽名值</label><br/> <input type="text" name="ChkValue" value="<? echo $chkvalue; ?>" readonly/><br/> <input type="submit" value="支付"> </form>