银联支付用的还是比较少的,而且开发中也没接触多少,不过因为工作项目用银联支付能降低费率,所以还是接入了银联支付。本文支付为银联网关和WAP支付接口。

官方网站SDK&DEMO:https://open.unionpay.com/ajweb/product/detail?id=66

产品API:https://open.unionpay.com/ajweb/product/newProApiShow?proId=1&apiId=63
API文档https://open.unionpay.com/ajweb/help/api
在开始之前要仔细阅读官方包里的说明文件,必要的证书和商户信息要提前获取。
实例代码及步骤:

修改demo/api_01_gateway/Form_6_2_FrontConsume.php(发送订单参数,跳转支付界面)

<?php
header ( 'Content-type:text/html;charset=utf-8' );
include_once("../../../../include/config.inc.php");
include_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR . './../../sdk/acp_service.php';

/**
* 重要:联调测试时请仔细阅读注释!
*
* 产品:跳转网关支付产品<br>
* 交易:消费:前台跳转,有前台通知应答和后台通知应答<br>
* 日期: 2015-09<br>
* 版本: 1.0.0
* 版权: 中国银联<br>
* 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能规范性等方面的保障<br>
* 提示:该接口参考文档位置:open.unionpay.com帮助中心 下载 产品接口规范 《网关支付产品接口规范》,<br>
* 《平台接入接口规范-第5部分-附录》(内包含应答码接口规范,全渠道平台银行名称-简码对照表)<br>
* 《全渠道平台接入接口规范 第3部分 文件接口》(对账文件格式说明)<br>
* 测试过程中的如果遇到疑问或问题您可以:1)优先在open平台中查找答案:
* 调试过程中的问题或其他问题请在 https://open.unionpay.com/ajweb/help/faq/list帮助中心 FAQ 搜索解决方案
* 测试过程中产生的7位应答码问题疑问请在https://open.unionpay.com/ajweb/help/respCode/respCodeList输入应答码搜索解决方案
* 2) 咨询在线人工支持: open.unionpay.com注册一个用户并登陆在右上角点击“在线客服”,咨询人工QQ测试支持。
* 交易说明:1)以后台通知或交易状态查询交易确定交易成功,前台通知不能作为判断成功的标准.
* 2)交易状态查询交易(Form_6_5_Query)建议调用机制:前台类交易建议间隔(5分、10分、30分、60分、120分)发起交易查询,如果查询到结果成功,则不用再查询。(失败,处理中,查询不到订单均可能为中间状态)。也可以建议商户使用payTimeout(支付超时时间),过了这个时间点查询,得到的结果为最终结果。
*/

//接收支付数据
$order_data = trim(get_param("orderDa")); //订单数据
if($order_data == "" ){
$mssage = "数据不能为空";
showinfo($mssage,'' ,3);
exit;
}
$result_order = json_decode(uc_authcode(base64_decode($order_data), 'DECODE', ADMIN_KEY),true);

//商户订单号,商户网站订单系统中唯一订单号,必填
$out_trade_no = $result_order['WIDout_trade_no'];

//付款金额,必填(单位元)
$total_amount = $result_order['WIDtotal_amount'];

//商户代码,请改自己的测试商户号,此处默认取demo演示页面传递的参数

//订单发送时间
$send_time = date('YmdHis',THIS_DATETIME);

//订单超时时间
$time_out = date('YmdHis',strtotime('+15 minutes',THIS_DATETIME));

//验证数据
$pay_md5 = $result_order['infoPy']; //订单验证

if($out_trade_no==''){
$mssage = "订单号不能为空";
showinfo($mssage,'' ,3);
exit;
}
if($total_amount=='' || $total_amount==0){
$mssage = "订单金额不能为空";
showinfo($mssage,'' ,3);
exit;
}

//购买商品
if($result_order['flag']=='paycard'){
//检测是否有订单号
$where = " and o_orderid = '".$out_trade_no."' and o_totalprice='".$total_amount."' and o_status=4 ";
$info = get_info($GLOBALS["conn"],"game_order",array(),$where);

if( empty($info) ){
$mssage = "没有此订单!";
showinfo($mssage,'' ,3);
exit;
}
//验证数据
$p_arr = array( 'uid'=>$info['o_playerid'], 'uorder'=>$info['o_orderid'], 'uprice'=>$info['o_totalprice'],);
$p_time = $info['o_addtime'];
$p_key = ADMIN_KEY;
$p_md5 = md5($p_arr.$p_time.$p_key);
if( $p_md5 != $pay_md5 ){
$mssage = "请勿非法操作!";
showinfo($mssage,'' ,3);
exit;
}
}

//申请还款
if($result_order['flag']=='repayment'){
//检测是否有订单号
$where = " and l_orderid = '".$out_trade_no."' and l_returnnum='".$total_amount."' and l_status=3 ";
$info = get_info($GLOBALS["conn"],"game_loan_order",array(),$where);

if( empty($info) ){
$mssage = "没有此订单!";
showinfo($mssage,'' ,3);
exit;
}
//验证数据
$p_arr = array( 'uid'=>$info['l_playerid'], 'uorder'=>$info['l_orderid'], 'uprice'=>$info['l_returnnum']);
$p_time = $info['l_addtime'];
$p_key = ADMIN_KEY;
$p_md5 = md5($p_arr.$p_time.$p_key);
if( $p_md5 != $pay_md5 ){
$mssage = "请勿非法操作!";
showinfo($mssage,'' ,3);
exit;
}
}

//记录要提交的订单信息到日志
$log_msg = "订单内容:" . json_encode($result_order);
sys_log_write_content( $log_msg.__FILE__.__LINE__ ,"pay_log","jsapi");

$params = array(

//以下信息非特殊情况不需要改动
'version' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->version, //版本号
'encoding' => 'utf-8', //编码方式
'txnType' => '01', //交易类型
'txnSubType' => '01', //交易子类
'bizType' => '000201', //业务类型
'frontUrl' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->frontUrl, //前台通知地址
'backUrl' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->backUrl, //后台通知地址
'signMethod' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->signMethod, //签名方法
'channelType' => '08', //渠道类型,07-PC,08-手机
'accessType' => '0', //接入类型
'currencyCode' => '156', //交易币种,境内商户固定156

//TODO 以下信息需要填写
'merId' => '', //商户代码,请改自己的测试商户号,此处默认取demo演示页面传递的参数
'orderId' => $out_trade_no, //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则
'txnTime' => $send_time, //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数
'txnAmt' => $total_amount*100, //交易金额,单位分,此处默认取demo演示页面传递的参数

// 订单超时时间。
// 超过此时间后,除网银交易外,其他交易银联系统会拒绝受理,提示超时。 跳转银行网银交易如果超时后交易成功,会自动退款,大约5个工作日金额返还到持卡人账户。
// 此时间建议取支付时的北京时间加15分钟。
// 超过超时时间调查询接口应答origRespCode不是A6或者00的就可以判断为失败。
'payTimeout' => $time_out

// 请求方保留域,
// 透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据。
// 出现部分特殊字符时可能影响解析,请按下面建议的方式填写:
// 1. 如果能确定内容不会出现&={}[]"'等符号时,可以直接填写数据,建议的方法如下。
// 'reqReserved' =>'透传信息1|透传信息2|透传信息3',
// 2. 内容可能出现&={}[]"'符号时:
// 1) 如果需要对账文件里能显示,可将字符替换成全角&={}【】“‘字符(自己写代码,此处不演示);
// 2) 如果对账文件没有显示要求,可做一下base64(如下)。
// 注意控制数据长度,实际传输的数据长度不能超过1024位。
// 查询、通知等接口解析时使用base64_decode解base64后再对数据做后续解析。
// 'reqReserved' => base64_encode('任意格式的信息都可以'),

//TODO 其他特殊用法请查看 special_use_purchase.php
);

com\unionpay\acp\sdk\AcpService::sign ( $params );
$uri = com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->frontTransUrl;
$html_form = com\unionpay\acp\sdk\AcpService::createAutoFormHtml( $params, $uri );
echo $html_form;
?>

修改demo/api_01_gateway/FrontReceive.php(前台同步通知)
<?php
include_once("../../../../include/config.inc.php");
include_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR . './../../sdk/acp_service.php';
/**
* 交易说明: 前台类交易成功才会发送后台通知。后台类交易(有后台通知的接口)交易结束之后成功失败都会发通知。
* 为保证安全,涉及资金类的交易,收到通知后请再发起查询接口确认交易成功。不涉及资金的交易可以以通知接口respCode=00判断成功。
* 未收到通知时,查询接口调用时间点请参照此FAQ:https://open.unionpay.com/ajweb/help/faq/list?id=77&level=0&from=0
*/

$logger = com\unionpay\acp\sdk\LogUtil::getLogger();
$logger->LogInfo("receive front notify: " . com\unionpay\acp\sdk\createLinkString ( $_POST, false, true ));

//页面回跳地址
$fail_back_url = WEBPATH_DIR_INC.'enter-query.html';
$succ_back_url = WEBPATH_DIR_INC.'enter-query.html';

//验签
if (isset ( $_POST ['signature'] )) {
$result = com\unionpay\acp\sdk\AcpService::validate ( $_POST );
if($result){//验签成功
$respCode = $_POST ['respCode'];//应答码
if($respCode=='00' || $respCode=='A6'){//交易成功
//请在这里加上商户的业务逻辑程序代码
//返回参数
$orderId = $_POST ['orderId'];//商户订单号
$totalAmount = $_POST['txnAmt'];//交易金额
$merId = $_POST['merId'];//商户代码

$res = 'success';
//判断支付类型(提现还是借贷)
$type = substr($orderId,0,2);

//获取对应订单信息
if($type=='tx'){
$order_info = get_order_info($orderId);

//验证订单数据
if(empty($order_info)){
$res = 'fail';
}
if($totalAmount != $order_info['o_totalprice']*100){
$res = 'fail';
}
}

if($type=='jd'){
$order_info = get_loan_order_info($orderId);

//验证订单数据
if(empty($order_info)){
$res = 'fail';
}
if($totalAmount != $order_info['l_returnnum']*100){
$res = 'fail';
}
}

//验证商户代码
//TODO

}else{
$res = 'fail';
}
}else{
$res = 'fail';
}
} else {
$res = 'fail';
}

?>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>银联支付-订单支付</title>
<script type="text/javascript">
function callpay(){
var res = '<?php echo $res;?>';
if(res=='success'){
var Idiv = document.getElementById("pay_error2");
}else{
var Idiv = document.getElementById("pay_error");
}
Idiv.style.display = "block";
}

//页面进入即进行支付
window.onload = function(){ callpay(); };

</script>
</head>
<body>
<style>
*{ margin:0; padding:0; background:#e1e1e1;}
#pay_error, #pay_error2{ display:none; width:90%; height:100%; text-align:center; color:#fe5f16; font-size:20px; padding:20px 0; font-weight:bolder; border:1px solid #ccc; margin:0 5%; height:100px; margin-top:50%; border-radius:10px; background:#fff;}
#pay_error p,#pay_error2 p{ background:#fff;}
#pay_error a,#pay_error2 a{ background:#83da49; color:#fff; text-decoration:none; display:block; padding:10px 0; width:60%; margin-left:20%; margin-top:20px;}
</style>
<div id="pay_error">
<p class="p1">支付失败,请重新完成支付!</p>
<p class="bt"><a href="<?php echo $fail_back_url;?>">确定</a></p>
</div>
<div id="pay_error2">
<p class="p1">恭喜你,支付成功</p>
<p class="bt"><a href="<?php echo $succ_back_url;?>">确定</a></p>
</div>
</body>
</html>

修改demo/api_01_gateway/BackReceive.php(后台异步通知)
<?php
include_once("../../../../include/config.inc.php");
include_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR . './../../sdk/acp_service.php';
include_once "Form_6_5_Query.php";
/**
* 交易说明: 前台类交易成功才会发送后台通知。后台类交易(有后台通知的接口)交易结束之后成功失败都会发通知。
* 为保证安全,涉及资金类的交易,收到通知后请再发起查询接口确认交易成功。不涉及资金的交易可以以通知接口respCode=00判断成功。
* 未收到通知时,查询接口调用时间点请参照此FAQ:https://open.unionpay.com/ajweb/help/faq/list?id=77&level=0&from=0
*/

$logger = com\unionpay\acp\sdk\LogUtil::getLogger();
$logger->LogInfo("receive back notify: " . com\unionpay\acp\sdk\createLinkString ( $_POST, false, true ));

//验签
if (isset ( $_POST ['signature'] )) {
$result = com\unionpay\acp\sdk\AcpService::validate ( $_POST );
if($result){//验签成功
$respCode = $_POST ['respCode'];//应答码
if($respCode=='00' || $respCode=='A6'){//交易成功
//返回参数
$orderId = $_POST ['orderId'];//商户订单号
$totalAmount = $_POST['txnAmt'];//交易金额
$merId = $_POST['merId'];//商户代码
$txnTime = $_POST['txnTime'];//订单发送时间
$trade_no = $_POST['queryId'];//银联流水号

//发起查询交易接口
$check_res = check_Trade_Res($orderId,$merId,$txnTime,THIS_DATETIME);
if($check_res=='200'){
//成功
//请在这里加上商户的业务逻辑程序代码
//判断支付类型(提现还是借贷)
$type = substr($orderId,0,2);

//获取对应订单信息
if($type=='tx'){
$order_info = get_order_info($orderId);

//验证订单数据
if(empty($order_info)){
echo 'fail';
return;
}
if($totalAmount != $order_info['o_totalprice']*100){
echo 'fail';
return;
}
}

if($type=='jd'){
$order_info = get_loan_order_info($orderId);

//验证订单数据
if(empty($order_info)){
echo 'fail';
return;
}
if($totalAmount != $order_info['l_returnnum']*100){
echo 'fail';
return;
}
}

//验证商户代码
//TODO

//执行成功后的业务程序
if($type=='tx'){
if($order_info['o_status']==4){
//执行业务处理
//取出礼包码
$sql = "select sysid,gc_code from ".get_table("game_gift_code")." where gc_status=1 limit 1";
$query = $GLOBALS["conn"]->Query($sql);
$value = $GLOBALS['conn']->FetchArray($query);

$up_arr = array(
'o_status' => 1,
'o_trade_no' => $trade_no,
'o_giftcode' => $value['gc_code']
);
$up_where = " and o_orderid='".$orderId."'";
$row = update_record($GLOBALS["conn"],'game_order',$up_arr,array(),$up_where);//更新订单数据
if($row>0){
$msg = "订单 ".$orderId." 已支付";
$log_msg = "call back:" . $msg;
sys_log_write_content( $log_msg.__FILE__.__LINE__ ,"pay_log","notify_order_success");

//更新礼包码状态
$up_gift = array(
'gc_status'=>2,
'gc_time' => THIS_DATETIME,
'gc_orderid' => $orderId
);
$gift_where = " and sysid=".$value['sysid'];
update_record($GLOBALS["conn"],'game_gift_code',$up_gift,array(),$gift_where);

//更新商品出售数量
/*$where = " and og_sysid='".$orderId."'";
$garr = get_info($GLOBALS['conn'],"game_order_goods",array('og_goodsid'),$where,'',true);
foreach($garr as $k=>$v){
$up_num = array(
'g_sellnum' => 'g_sellnum'+1
);
$num_where = " and g_id='".$v."'";
update_record($GLOBALS['conn'],"game_goods",$up_num,array(),$num_where);//更新商品出售
}*/

//新增用户消息
$title = '付款成功,请试用后尽快退款';//标题
$content = '您的订单['.$orderId.']已经付款成功,<br>道具试用后可申请退款退回绑定借记卡,适合现金紧缺的玩家!系统赠送您的游戏兑换码:'.$value['gc_code'].',可以在您的游戏中进行使用,感谢您的支持!<br>如需帮助,请点击左上角【帮助】找到您的问题或者联系客服进行人工服务,QQ:2013609564';
add_player_msg($order_info['o_playerid'],$title,$content);
}
}
}

if($type=='jd'){
if($order_info['l_status']==3){
//执行业务处理
$up_arr = array(
'l_status' => 4,
'l_trade_no' => $trade_no,
'l_returntime' => THIS_DATETIME
);
$up_where = " and l_orderid='".$orderId."'";
$row = update_record($GLOBALS["conn"],'game_loan_order',$up_arr,array(),$up_where);//更新订单数据
if($row>0){
$msg = "订单 ".$orderId." 已支付";
$log_msg = "call back:" . $msg;
sys_log_write_content( $log_msg.__FILE__.__LINE__ ,"pay_log","notify_order_success");
}
}
}

echo "success";
}else{
echo "fail";
}
}else{
echo 'fail';
}
}else{
echo 'fail';
}
} else {
echo 'fail';
}

?>

封装主动查询交易结果接口方法
<?php
include_once("../../../../include/config.inc.php");
header ( 'Content-type:text/html;charset=utf-8' );
//include_once $_SERVER ['DOCUMENT_ROOT'] . '/upacp_demo_b2c/sdk/acp_service.php';

/**
* 重要:联调测试时请仔细阅读注释!
*
* 产品:跳转网关支付产品<br>
* 交易:交易状态查询交易:只有同步应答 <br>
* 日期: 2015-09<br>
* 版本: 1.0.0
* 版权: 中国银联<br>
* 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考,不提供编码性能及规范性等方面的保障<br>
* 该接口参考文档位置:open.unionpay.com帮助中心 下载 产品接口规范 《网关支付产品接口规范》,<br>
* 《平台接入接口规范-第5部分-附录》(内包含应答码接口规范,全渠道平台银行名称-简码对照表)<br>
* 测试过程中的如果遇到疑问或问题您可以:1)优先在open平台中查找答案:
* 调试过程中的问题或其他问题请在 https://open.unionpay.com/ajweb/help/faq/list帮助中心 FAQ 搜索解决方案
* 测试过程中产生的7位应答码问题疑问请在https://open.unionpay.com/ajweb/help/respCode/respCodeList输入应答码搜索解决方案
* 2) 咨询在线人工支持: open.unionpay.com注册一个用户并登陆在右上角点击“在线客服”,咨询人工QQ测试支持。
* 交易说明: 1)对前台交易发起交易状态查询:前台类交易建议间隔(5分、10分、30分、60分、120分)发起交易查询,如果查询到结果成功,则不用再查询。(失败,处理中,查询不到订单均可能为中间状态)。也可以建议商户使用payTimeout(支付超时时间),过了这个时间点查询,得到的结果为最终结果。
* 2)对后台交易发起交易状态查询:后台类资金类交易同步返回00,成功银联有后台通知,商户也可以发起 查询交易,可查询N次(不超过6次),每次时间间隔2N秒发起,即间隔1,2,4,8,16,32S查询(查询到03,04,05继续查询,否则终止查询)。
* 后台类资金类同步返03 04 05响应码及未得到银联响应(读超时)需发起查询交易,可查询N次(不超过6次),每次时间间隔2N秒发起,即间隔1,2,4,8,16,32S查询(查询到03,04,05继续查询,否则终止查询)。
*/

function check_Trade_Res($orderId,$merId,$txnTime,$firTime=THIS_DATETIME){
$params = array(
//以下信息非特殊情况不需要改动
'version' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->version, //版本号
'encoding' => 'utf-8', //编码方式
'signMethod' => com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->signMethod, //签名方法
'txnType' => '00', //交易类型
'txnSubType' => '00', //交易子类
'bizType' => '000000', //业务类型
'accessType' => '0', //接入类型
'channelType' => '07', //渠道类型

//TODO 以下信息需要填写
'orderId' => $orderId, //请修改被查询的交易的订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数
'merId' => $merId, //商户代码,请改自己的测试商户号,此处默认取demo演示页面传递的参数
'txnTime' => $txnTime,//请修改被查询的交易的订单发送时间,格式为YYYYMMDDhhmmss,此处默认取demo演示页面传递的参数
);

com\unionpay\acp\sdk\AcpService::sign ( $params ); // 签名
$url = com\unionpay\acp\sdk\SDKConfig::getSDKConfig()->singleQueryUrl;

$result_arr = com\unionpay\acp\sdk\AcpService::post ( $params, $url);
if(count($result_arr)<=0) { //没收到200应答的情况
//printResult ( $url, $params, "" );
return;
}

//printResult ($url, $params, $result_arr ); //页面打印请求应答数据

if (!com\unionpay\acp\sdk\AcpService::validate ($result_arr) ){
return '400';
}

if ($result_arr["respCode"] == "00"){
if ($result_arr["origRespCode"] == "00"){
//交易成功
//TODO
//echo "交易成功。<br>\n";
return '200';
} else if ($result_arr["origRespCode"] == "03"
|| $result_arr["origRespCode"] == "04"
|| $result_arr["origRespCode"] == "05"){
//后续需发起交易状态查询交易确定交易状态
//TODO
//echo "交易处理中,请稍微查询。<br>\n";
//间隔查询
ignore_user_abort(1);
set_time_limit(0);
$interval = 60*5;//5分钟
sleep($interval);
do{
if(THIS_DATETIME-$firTime>60*120){
return '400';
}
check_Trade_Res($orderId,$merId,$txnTime);//再次查询
}while(true);
} else {
//其他应答码做以失败处理
//TODO
//echo "交易失败:" . $result_arr["origRespMsg"] . "。<br>\n";
return '400';
}
} else if ($result_arr["respCode"] == "03"
|| $result_arr["respCode"] == "04"
|| $result_arr["respCode"] == "05" ){
//后续需发起交易状态查询交易确定交易状态
//TODO
//echo "处理超时,请稍微查询。<br>\n";
//间隔查询
ignore_user_abort(1);
set_time_limit(0);
$interval = 60*5;//5分钟
sleep($interval);
do{
if(THIS_DATETIME-$firTime>60*120){
return '400';
}
check_Trade_Res($orderId,$merId,$txnTime);//再次查询
}while(true);
} else {
//其他应答码做以失败处理
//TODO
//echo "失败:" . $result_arr["respMsg"] . "。<br>\n";
return '400';
}
}

/**
* 打印请求应答
*
* @param
* $url
* @param
* $req
* @param
* $resp
*/
function printResult($url, $req, $resp) {
echo "=============<br>\n";
echo "地址:" . $url . "<br>\n";
echo "请求:" . str_replace ( "\n", "\n<br>", htmlentities ( com\unionpay\acp\sdk\createLinkString ( $req, false, true ) ) ) . "<br>\n";
echo "应答:" . str_replace ( "\n", "\n<br>", htmlentities ( com\unionpay\acp\sdk\createLinkString ( $resp , false, false )) ) . "<br>\n";
echo "=============<br>\n";
}
---------------------
作者:xxd_hr
原文:https://blog.csdn.net/qq603283912/article/details/78720960

php实现银联支付的更多相关文章

  1. iOS----支付(微信支付、支付宝支付、银联支付控件集成支付)(转)

    资料 支付宝 //文档idk都包含了安卓.iOS版 银 联 银联官网资料 Demo Demo给了一个订单号,做测试使用,若出现支付失败什么的,可能是已经被别人给支付了,或者是服务器订单过期了 ~ 一. ...

  2. Phonegap 之 iOS银联在线支付(js调用ios端银联支付控件)

    Phonegap项目,做支付的时候,当把网站打包到ios或android端成app后,在app上通过wap调用银联在线存在一个问题: 就是当从银联支付成功后,再从服务器返回到app客户端就很难实现. ...

  3. UnionPay,ChinaPay 最新 银联支付接口C#\Asp.net\MVC 版本

    1.概念普及 一.理解什么是UnionPay.ChinaPay 这两个概念如果搞不清楚,绝对够你瞎折腾一段时间的. UnionPay:中国银联,最大的机构:他本身也提供系统接口但都是B2B的,对于单个 ...

  4. iOS 集成银联支付

    下载地址:https://open.unionpay.com/upload/download/Development_kit85427986.rar 其实我找了半个小时 也不知道怎么就下载好了 这个我 ...

  5. 集成 Union Pay - 银联支付

    作者感言 前面已经把WeChat SDK的支付, AliPay SDK搞得七七八八了, 接下来就是银联支付的Union Pay SDK.最后:如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, ...

  6. iOS第三方支付-银联支付

    #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> #import "UPPayPluginDeleg ...

  7. 李洪强iOS开发支付集成之银联支付

    iOS开发支付集成之银联支付 银联官网在这里,这里能下载SDK或者是看文档.最新的版本写的简单了很多,看文档一直做下去基本上就没问题了. 首先,SDK在这里下载,里面包含需要的库文件和详细的文档. 银 ...

  8. unity3d银联支付出现闪退

    在接入银联SDK的unity3d的游戏中,点击银联支付会出现游戏总是出现闪退现象 ,后来网上有资料说 打开银联的jar包,将里面的res/drawable目录下的文件,拷贝到您的工程的drawable ...

  9. ios中的银联支付

    场景 随着移动互联网的迅猛发展,移动互联已经深深地融入我们的生活.其中,支付方式也是我们生活中经常遇到的情况.所以,在我们的应用中加入支付功能是多么的重要.现在主流的支付接口,一是支付宝类的,一是银联 ...

  10. TP3.2.3 接入银联支付

    TP3.2.3 接入银联支付 项目接入银联支付的过程, 在此记录下,希望能帮助开发盆友平坑. 银联SKD链接:https://open.unionpay.com/ajweb/product/newPr ...

随机推荐

  1. vim常用快捷汇总

    移动光标的方法 h 或 向左箭头键(←) 光标向左移动一个字符 j 或 向下箭头键(↓) 光标向下移动一个字符 k 或 向上箭头键(↑) 光标向上移动一个字符 l 或 向右箭头键(→) 光标向右移动一 ...

  2. 毕向东_Java基础视频教程第20天_IO流(11~14)

    第20天-11-IO流(Properties简述) .properties是一种主要在Java相关技术中用来存储应用程序的可配置参数的文件的文件扩展名.它们也可以存储用于国际化和本地化的字符串,这种文 ...

  3. Project Euler 44: Find the smallest pair of pentagonal numbers whose sum and difference is pentagonal.

    In Problem 42 we dealt with triangular problems, in Problem 44 of Project Euler we deal with pentago ...

  4. ext3 转 ext4 操作

    先关闭相关服务 cd / umount /dev/vg_nosql/nosql tune2fs -O has_journal,extents,huge_file,flex_bg,uninit_bg,d ...

  5. Java SimpleDateFormat对象的parse方法处理12点变成00点

    原文链接:https://blog.csdn.net/chenbetter1996/article/details/82812959 new SimpleDateFormat("格式&quo ...

  6. 沉淀,再出发:docker的原理浅析

    沉淀,再出发:docker的原理浅析 一.前言 在我们使用docker的时候,很多情况下我们对于一些概念的理解是停留在名称和用法的地步,如果更进一步理解了docker的本质,我们的技术一定会有质的进步 ...

  7. iOS开发之UIView

    在iPhone里你能看到的.摸到的,都是UIView. 视图坐标系统: UIKit中的坐标都是基于这样的坐标系统:以左上角为坐标的原点,原点向下和向右为坐标轴方向. 坐标值由浮点数来表示,内容的布局和 ...

  8. c++ 一般虚函数

    类图: 代码: #include <iostream> using namespace std; class CFather //父类 { public: virtual void dis ...

  9. Ping服务

    什么是Ping服务 ping是基于XML_RPC标准协议的更新通告服务,用于博客把内容更新快速通知给百度,以便百度及时进行抓取和更新. Ping服务使用方法 你可以采取手动通知和自动通知两种方式使用p ...

  10. BZOJ4653:[NOI2016]区间(线段树)

    Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...