merID:银行提供.唯一确定一个商户的代码,由商户在工行开户时,由工行告知商户.
merAcct:银行提供 , 商城收费入账账号 (只能交易时指定).
懂得html代码跟PHP的程序员一名
方法/步骤
由程序员按照一下步骤来做即可,在商城提交表单的页面添加以下控件.
html xmlns=;
head
title百度一下,你就知道 /title
/head
body
FORM name="order" METHOD=POST ACTION=""
!--
订单只能使用POST方式提交;使用https协议通讯;
--
INPUT NAME="interfaceVersion" TYPE="text" value="1.0.0.0"
!--接口版本目前为"1.0.0.0"--
INPUT NAME="orderid" TYPE="text" value="000000001"
!--订单号商户端产生,一天内不能重复.--
INPUT NAME="amount" TYPE="text" value="100"
!--金额以分为单位--
INPUT NAME="curType" TYPE="text" value="001"
!--币种目前只支持人民币,代码为"001"--
INPUT NAME="merID" TYPE="text" value="XXXXXXXXXX"
INPUT NAME="merAcct" TYPE="text" value="XXXXXXXXXX"
INPUT NAME="verifyJoinFlag" TYPE="text" value="0"
!--"1"判断该客户是否与商户联名;取值"0"不检验客户是否与商户联名.--
INPUT NAME="notifyType" TYPE="text" value="HS"
!--HS方式实时发送通知;AG方式不发送通知;--
INPUT NAME="merURL" TYPE="text" value=""
INPUT NAME="resultType" TYPE="text" value="0"
!--对于HS方式"0":发送成功或者失败信息;"1",只发送交易成功信息.--
!--签名数据串,这里举例用的测试私钥user.key(顺序固定;被商户签名的串为各输入项的值):
接口名称的值◆接口版本号的值◆商城代码的值◆商城账号的值◆通知地址的值◆结果发送类型的值◆订单号的值◆订单金额的值◆支付币种的值◆通知类型的值◆交易日期时间的值◆校验联名标志的值--
!--这里举例用的测试证书user.crt--
INPUT NAME="goodsID" TYPE="text" value="abcd001"
!--商品编号,自商城获得--
INPUT NAME="goodsName" TYPE="text" value="小毡帽"
!--商品名称,自商城获得--
INPUT NAME="goodsNum" TYPE="text" value="1"
!--商品数量,自商城获得--
INPUT NAME="carriageAmt" TYPE="text" value="100"
!--已含运费金额,金额以分为单位,自商城获得--
!--商城提示,以上五个字段用于客户支付页面显示--
INPUT NAME="remark1" TYPE="text" value=" "
!--备注字段 MAX(100)--
INPUT TYPE="submit" value=" 提 交 订 单 "
/form
END
注意事项
注意商户提交订单数据不能提交接口中没有定义的字段
提交按钮不能设置name属性,如果设置了,提交按钮的值将作为一个变量提交,可能造成数据检查错误
经验内容仅供参考,如果您需解决具
支付接口现在有第三方的支付接口也有银行的支付接口.这里就来介绍php版本银联支付接口开发的方法.
银联支付,首先要注意二重要的部分:
开了扩展openssl
开发手册上面的列子只做参考,因为基本都是错的.你可以试着去官网下一个demo...注意现在银联开发,没有测试密钥提供,只能在正式环境开发
下面是我用ThinkPHP编写的一个支付类
/**
*?银联支付?v0.1
*?**/
class?NetPayAction?extends?BaseAction{
//在类初始化方法中,引入相关类库
public?function?_initialize()?{
vendor('Netpay.util.common',"",".php");?//导入加密核心文件夹
vendor('Netpay.util.SecssUtil',"",".class.php");?//导入加密核心文件夹
vendor('Netpay.util.Settings_INI',"",".php");?//导入加密核心文件夹
vendor('Netpay.util.Settings',"",".php");?//导入加密核心文件夹
$this-securityPropFile=?$_SERVER['DOCUMENT_ROOT']?.?"/ThinkPHP/Extend/Vendor/Netpay/config/security.properties";?//谁知道这是啥,反正他们要我加的
$this-;MerBgUrl?=?__APP__."/Index/NetPay/MerBgUrl";
$this-MerPageUrl?=?__APP__."/Index/NetPay/MerPageUrl";
}
public?function?index()
{
$paramArray=array?(
'MerId'?=?'商户号',
'OrderAmt'?=?'1',
'TranType'?=?'0001',
'BusiType'?='0001',
'CurryNo'?=?'CNY',
'AccessType'?=;?'0',
'CommodityMsg'?=?'测试商品1号',
'MerPageUrl'?=?$this-MerBgUrl,
'MerBgUrl'?=$this-MerPageUrl,
'MerResv'?=?'MerResv',
);
if?(count($paramArray)?0)?{
$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?=?$thissecurityPropFile;
$secssUtil-init($securityPropFile);
$secssUtil-sign($sendMap);
$sendMap["Signature"]?=?$secssUtil-getSign();
$_SESSION?=?$sendMap;
header("Location:"?.?$dispatchUrl);
layout(false);
$settings?=?new?Settings_INI();
$settings-oad($this-securityPropFile);
$pay_url?=?"";
$html?=?"form?name='payment'?action='{$pay_url}'?method='POST'?target='_blank';";
$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='hidden'?name?=?'"?.?$k?.?"'?value?='"?.?$v?.?"'/";
$html?.=?"nput?type='button'?type='hidden'?value='提交订单'?";
$html?.=?";/from";
$this-html?=?$html;
public?function?pgReturn(){
if?($_POST)?{
if?(count($_POST)?0)?{
$text?=?array();
foreach($_POST?as?$key=$value){
$text[$key]?=?urldecode($value);
if?($secssUtil-verify($text))?{
//支付成功
$_SESSION["VERIFY_KEY"]?=?"success";
//支付失败
$_SESSION["VERIFY_KEY"]?=?"fail";
银联支付应该是算比较简单的!!
对方应该有sdk和demo提供的,支付接口的流程都差不多,包括支付宝,网银,财付通,paypal等流程都一样.
用户下单,收集购物车内产品的总价
拼装支付参数URL跳转进入支付网关进行支付(这里会用到支付网关提供的SDK)
支付成功
支付网关服务器会异步发送支付成功的通知到你的"通知URL",你对过来的参数进行有效性验证,确保是从支付网关发来的,进行业务逻辑处理,比如设置订单完成标识等操作;
注意这不是"返回URL",这一步操作前台支付用户不会看到.
网关一般在完成支付后,会自动返回我们的网站,进入网站后提示用户完成支付,并跳转到相应页面即可.
第二步:支付接口分很多语言版本,比如ASP、JSP、PHP、.NET语言版本,所以要选择与自己网站语言匹配的接口进行安装.商城网站的技术一般比较清楚商城的开发语言.
第三步:拿到的支付接口一般包括接口文档和接口代码示例,选择合适的接口代码示例,进行联调,比如自己网站是PHP开发的,就选择PHP代码示例联调.
第四步:接口联调的时候,需要第三方支付提供联调测试账号,方可以联调.联调除了需要联调账号除外,还需要该账号的支付密钥,联调过程中,有什么问题,可以直接找第三方支付技术支持给予协调处理.
第五步:接口联调通过后,可先换成生产环境账号,进行交易测试,测试没问题后,可以放到商城网站进行交易.