银联支付

Java接入银联支付ChinaPay 中国银联是中国银行卡联合组织,通过银联跨行交易清算系统,实现商业银行系统间的互联互通和资源共享,保证银行卡跨行、跨地区和跨境的使用。 阅读详情

对银联支付的二次封装,支持pc端

类图

这里写图片描述


这里写图片描述

pay(pc):

    var title = "银联支付";
    var orderNo = ""; //订单号
    var tradeMoney = 0.00;
    var notifyUrl = "host/NotifyCallback.aspx";
    var returnUrl = "host/ReturnUrl.aspx";
    var key = ""; //账户的key
    var partner = ""; //账户的partnerid
    var chairtyName = ""; //账户显示名称
    var unionPay = new UnionPay.Submit(key, partner, chairtyName));
    unionPay.Pay(title, orderNo, tradeMoney, notifyUrl, returnUrl);

return(pc):

    public partial class NotifyUrl : UnionPay.NotifyPage
    {
        protected override void OnNotifyConfirm()
        {
            //todo:业务逻辑处理
        }
    }

Submit.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using com.unionpay.upop.sdk;

namespace UnionPay
{
    public class Submit
    {
        /// <summary>
        /// 实例化,默认UinonPay.config
        /// </summary>
        public Submit()
        {
            UPOPSrv.LoadConf(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UinonPay.config"));
        }

        /// <summary>
        /// 实例化
        /// </summary>
        /// <param name="configPath">配置文件全路径</param>
        public Submit(string configPath)
        {
            UPOPSrv.LoadConf(configPath);
        }

        /// <summary>
        /// 实例化
        /// </summary>
        /// <param name="key">key</param>
        /// <param name="partner">partnetid</param>
        /// <param name="chairtyName">账户名称</param>
        public Submit(string key, string partner, string chairtyName)
        {
            var stream = new Config().SetConfig(key, partner, chairtyName);
            UPOPSrv.LoadConf(stream);
        }

        public void Pay(string title, string orderNo, decimal tradeMoney, string notifyUrl, string returnUrl)
        {
            var param = new Dictionary<string, string>
                {
                    {"transType", UPOPSrv.TransType.CONSUME}, //交易类型,前台只支持CONSUME 和PRE_AUTH
                    {"commodityUrl", ""}, //商品URL
                    {"commodityName", title}, //商品名称
                    {"commodityUnitPrice", "1"}, //商品单价,分为单位
                    {"commodityQuantity", "1"}, //商品数量
                    {"orderNumber", orderNo}, //订单号
                    {"orderAmount", (tradeMoney * 100).ToString().Split('.')[0]}, //交易金额
                    {"orderCurrency", UPOPSrv.CURRENCY_CNY}, //币种
                    {"orderTime", DateTime.Now.ToString("yyyyMMddHHmmss")}, //交易时间
                    {"customerIp", HttpContext.Current.Request.UserHostAddress}, //用户IP
                    {"frontEndUrl", notifyUrl}, //前台回调URL
                    {"backEndUrl", returnUrl} //后台回调URL(前台请求时可为空)
                };
            var srv = new FrontPaySrv(param);
            HttpContext.Current.Response.Write(srv.CreateHtml());
        }
    }
}

Config.cs

using System.IO;
using System.Xml;

namespace UnionPay
{
    public class Config
    {
        private static XmlDocument _xmlDoc;

        /// <summary>
        /// xml模板
        /// </summary>
        private static XmlDocument XmlDoc
        {
            get
            {
                if (_xmlDoc == null)
                {
                    _xmlDoc = new XmlDocument();
                    _xmlDoc.Load("Template.config");
                }
                return _xmlDoc;
            }
        }

        public Stream SetConfig(string key, string partner, string chairtyName)
        {
            var ConfigInf = XmlDoc.SelectSingleNode("ConfigInf");
            var securityKey = ConfigInf.SelectSingleNode("securityKey");
            securityKey.InnerText = key;

            var payParamsPredef = ConfigInf.SelectSingleNode("payParamsPredef");
            var merId = payParamsPredef.SelectSingleNode("merId");
            merId.InnerText = partner;

            var merAbbr = payParamsPredef.SelectSingleNode("merAbbr");
            merAbbr.InnerText = chairtyName;

            var bytes = System.Text.Encoding.UTF8.GetBytes(XmlDoc.InnerXml);
            var stream = new MemoryStream(bytes);

            return stream;
        }
    }
}

Template.config

<?xml version="1.0"?>
<ConfigInf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <signMethod>MD5</signMethod>
  <securityKey>{$key}</securityKey>
  <frontPayURL>https://unionpaysecure.com/api/Pay.action</frontPayURL>
  <backPayURL>https://unionpaysecure.com/api/BSPay.action</backPayURL>
  <queryURL>https://unionpaysecure.com/api/Query.action</queryURL>
  <SSLCertPolicy>Ignore</SSLCertPolicy>
  <payParamsPredef>
    <version>1.0.0</version>
    <charset>UTF-8</charset>
    <merId>{$merId}</merId>
    <acqCode></acqCode>
    <merCode></merCode>
    <merAbbr>{$name}</merAbbr>
  </payParamsPredef>
  <payParams>
    <string>version</string>
    <string>charset</string>
    <string>transType</string>
    <string>origQid</string>
    <string>merId</string>
    <string>merAbbr</string>
    <string>acqCode</string>
    <string>merCode</string>
    <string>commodityUrl</string>
    <string>commodityName</string>
    <string>commodityUnitPrice</string>
    <string>commodityQuantity</string>
    <string>commodityDiscount</string>
    <string>transferFee</string>
    <string>orderNumber</string>
    <string>orderAmount</string>
    <string>orderCurrency</string>
    <string>orderTime</string>
    <string>customerIp</string>
    <string>customerName</string>
    <string>defaultPayType</string>
    <string>defaultBankNumber</string>
    <string>transTimeout</string>
    <string>frontEndUrl</string>
    <string>backEndUrl</string>
    <string>merReserved</string>
  </payParams>
  <payParamsNotEmpty>
    <string>version</string>
    <string>charset</string>
    <string>transType</string>
    <string>merId</string>
    <string>merAbbr</string>
    <string>orderNumber</string>
    <string>orderAmount</string>
    <string>orderCurrency</string>
    <string>orderTime</string>
    <string>customerIp</string>
    <string>frontEndUrl</string>
    <string>backEndUrl</string>
  </payParamsNotEmpty>
  <queryParams>
    <string>version</string>
    <string>charset</string>
    <string>transType</string>
    <string>merId</string>
    <string>orderNumber</string>
    <string>orderTime</string>
    <string>merReserved</string>
  </queryParams>
  <merReservedParams>
    <!--  NEW NAME  OLD NAME -->
    <string>cardNumber</string>
    <string>pan</string>
    <string>cardPasswd</string>
    <string>password</string>
    <string>credentialType</string>
    <string>idType</string>
    <string>cardCvn2</string>
    <string>cvn</string>
    <string>cardExpire</string>
    <string>expire</string>
    <string>credentialNumber</string>
    <string>idNo</string>
    <string>credentialName</string>
    <string>name</string>
    <string>phoneNumber</string>
    <string>mobile</string>
    <string>merAbstract</string>
    <!-- tdb only -->
    <string>orderTimeoutDate</string>
    <string>origOrderNumber</string>
    <string>origOrderTime</string>
  </merReservedParams>
</ConfigInf>

NotifyPage.cs

using System;
using System.Globalization;
using System.IO;
using System.Text;

namespace UnionPay
{
    public abstract class NotifyPage : System.Web.UI.Page
    {
        /// <summary>
        /// 商户订单号
        /// </summary>
        protected string OrderNo { get; private set; }

        /// <summary>
        /// 交易金额
        /// </summary>
        protected decimal TradeMoney { get; private set; }

        /// <summary>
        /// 交易状态
        /// </summary>
        protected string TradeStatus { get; private set; }

        /// <summary>
        /// 业务逻辑处理
        /// </summary>
        protected abstract void OnNotifyConfirm();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;
            OrderNo = Request.Form["orderNumber"];
            TradeMoney = Convert.ToDecimal(Request.Form["orderAmount"]);
            TradeStatus = Request.Form["respCode"];

            if (TradeStatus == "00")
            {
                OnNotifyConfirm();
                Response.Write("200");
            }
            Response.End();
        }

        /// <summary>
        /// 写日志
        /// </summary>
        protected void WriteLog(string text, string logType)
        {
            var strPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "/log/UnionPay/");
            var dateFloderName = DateTime.Now.ToString("yyyyMM");
            strPath = string.Format("{0}/{1}", strPath, dateFloderName);
            if (!Directory.Exists(strPath)) Directory.CreateDirectory(strPath);
            strPath = strPath + "\\" + DateTime.Now.ToString("yyyyMMddHHmmssffff", DateTimeFormatInfo.InvariantInfo) + ".txt";
            var fs = new StreamWriter(strPath, true, Encoding.Default);
            fs.Write(text);
            fs.Close();
        }
    }
}
支付时,中国网联结算与中国银联结算的区别与联系 综上所述,中国银联和中国网联在职责、业务重心和监管要求等方面存在明显的区别,但它们在支付清算市场中却紧密相连,共同推动着支付行业的创新和发展。未来,随着支付市场的不断变革和发展,银联和网联将继续加强合作,共同应对市场挑战,为支付市场的健康发展提供有力支持。网联的成立,旨在建立一个统一、规范的网络支付清算体系,保障支付市场的公平竞争和消费者权益。银联的主要职责是负责银行卡线下交易的跨行转接,推动银行卡业务的互联互通和标准化,以及提供各类基于银行卡的综合支付服务。一、中国网联与中国银联的定义与职责。 阅读详情

相关推荐

4.支付平台架构:业务、规划、设计与实现 --- 中国银联和中国网联

第4章 中国银联和中国网联 清算机构指负责管理和执行清算的机构,在我国除了中国人民银行,还有两家大型且具有合法资质的清算机构: 1.中国银联 是目前中国境内唯一的银行卡转接清算机构,具有中国人民银行颁发的银行卡清算业务许可证。 2.中国网联 是经人民银行批准成立的非银行支付机构的网络支付清算平台。 4.1 中国银联介绍 4.1.1 互联互通 4.1.2 跨区跨行跨境交易清算 有以下系统或参与者与中国银联银行卡跨行支付系统进行数据通信和交付: 1.持卡人 .

enlyhua的专栏 3714

银联支付服务之公众号支付业务(二)

上一节已经介绍了银联的公众号支付业务,以及如何注册成为开发者,这一节将创建一个控制台应用程序调启微信支付并成功付款。 一、请求协议 HTTP(S) HTTP方法:GET 二、接口地址 测试环境:http://58.247.0.18:29015/v1/netpay/webpay/pay 生产环境:https://api-mop.chinaums.com/v1/netpay/webpay/pay 三、参数 3.1URL参数 参数名称 参数说明 参数类型 长度 是否必须

xiaolu1014的博客 9166

中国银联支付集成:PHP实现指南

在现代商业环境中,电子支付已成为不可或缺的交易方式。作为中国最知名和最大的银行卡联合组织,中国银联提供了广泛的支付接口服务,为商户和消费者提供便捷、安全的支付体验。银联支付接口允许开发者将支付功能集成到网站和应用程序中,支持包括借记卡和信用卡在内的多种银行卡支付。银联支付接口不仅仅是一个简单的支付工具,它是一个复杂而全面的系统,它涉及到订单管理、资金转账、数据安全等多个方面。为了确保交易的安全性,银联制定了严格的安全标准和接口规范。理解这些规范对于维护支付系统稳定运行和保障交易安全至关重要。

weixin_31591833的博客 1147

支付宝、微信、银联移动支付集成

一、支付宝移动支付SDK开放平台:https://b.alipay.com/order/productDetail.htm?productId=2013080604609654&tabId=4#ps-tabinfo-hash业务流程:SDK集成:解压接口压缩文件(文件名是 WS_MOBILE_PAY_SDK_BASE.zip),找到 IOS 的压缩文件(文件名是支付宝移动支付 SDK 标准版(iOS

小路恢宏随手记 7464

深入解读中国银联移动支付技术规范

移动支付的安全机制是确保交易顺利完成的重要保障。本章节重点讨论了安全性的基本概念、加密技术、配置和部署的最佳实践,以及评估和优化策略。通过上述内容的学习和实践,读者可以加深对移动支付安全机制的理解,并在自己的项目中实施更有效的安全措施。移动支付的交易处理流程大致可以分为五个关键步骤:请求发送:用户通过移动设备发起支付请求,包括支付金额、支付方信息、收款方信息等。验证授权:支付系统对请求进行验证,包括用户身份验证、账户余额检查、支付额度审批等。交易执行。

weixin_28487725的博客 1052

中国银联支付系统集成与实践

本文还有配套的精品资源,点击获取 简介:中国银联支付Demo为开发者提供了集成银联支付服务的示例代码和文档,包含Java接口开发包和研发接入文档。它涵盖从交易处理到安全验证的关键接口和详细的接入指南,帮助开发者快速实现银联支付功能。此外,还提供了集成步骤和开发注意事项,确保开发者能够高效且安全地集成银联支付服务。 1. 银联支付系统集成概述 随着电子商务的蓬勃发...

weixin_32535825的博客 1939

使用银联商务实现微信小程序支付

最近公司的小程序需要使用到支付功能,我们使用的是银联商务的支付,那么如何在微信小程序中对接银联商务的微信小程序支付呢?这里我记录下我在微信小程序中实现银联商务的微信小程序支付流程 一:接口部分: 这里注意银联商务的小程序支付目前不支持测试号支付,只有使用正式的参数实现小程序支付 1:银联商务的小程序支付接口地址: https://qr.chinaums.com/netpay-route-...

huaweichenai的博客 1万+

提取abaqus中节点集合的应力应变

节点是没有应力应变的,只有积分点才有,所以直接在odb文件里面用FieldOutput是整不出来的(结果是个空列表),只能用session这种让abaqus自己帮你处理。具体的代码需要根据自己操作的时候abaqus.rpy这个文件中代码的变化来更改。

蓝胖子的博客 4552

银联支付(网银h5)

杉德全支付平台 需要的资料: 1.商户公钥 获取方式:先安装证书(注意:证书在收到邮件后14天内下载,并且只能下载一次),然后用IE打开https://cs.cfca.com.cn/cgi-bin/userCertDownload/v_input.do?displayAgreement=true 点击“工具—Internet选项”,查看证书,注意查看证书中的商户号是否与邮箱中发送的商户号一致...

jmkweb的博客 7889

【Tableau】解决订阅报表PDF中文显示为乱码(方框)问题

一、问题描述 在tableau server网页端报表中文字符能正常显示,但在订阅后发送到邮箱时,以图片格式呈现的内容中中文字符显示为方框。 网页端报表能正常显示中文字符: 邮件中的报表不能正常显示中文字符: 二、问题分析 网页端字符显示情况是由html编码决定的,而tableau生成图片时是通过所部署的服务器的字体文件显示字体。因此可能是由于Linux服务器缺失相关的字体文件导致网页端选择的中文字体在服务器上缺失对应的字体文件导致的。则考虑在服务器引入对应的字体文件。 三、问题解决 1、查看服务器现有

why_not_study的博客 2832

2017–2024年中国10米/20米分辨率水稻种植分布数据集

摘要:本数据集提供2017-2024年中国23个省级行政区的水稻种植分布数据,包含单季稻和双季稻分类(GeoTIFF格式,WGS84坐标系)。5个省份分辨率为20米,其余为10米,基于Sentinel卫星数据和TWDTW方法生成。数据公开共享(7.99GB),使用需注明来源并引用相关文献(DOI:10.12199/nesdc.ecodb.rs.2025.012)。涉及学科包括遥感、生态学和地理学,研究成果需发送至国家生态科学数据中心备案。

国科大硕士在读,分享Python/GEE/Matlab/R专业代码实践,涵盖数据分析、算法开发与应用技巧等,以代码会友。 1380

php实现银联商务公众号+服务窗支付

之前我们学习了银联商务的H5支付,但是现在H5支付不支持微信支付,最后发现银联商务的公众号+服务窗支付可以支持支付宝支付+微信支付+银联支付 一:接口地址: 测试接口地址:https://qr-test2.chinaums.com/netpay-portal/webpay/pay.do 正式接口地址:https://qr.chinaums.com/netpay-portal/webpay/p...

huaweichenai的博客 4083

SQL实现数据仓库ETL:分层设计、增量抽取与性能优化实践

在数据仓库建设过程中,ETL(抽取、转换、加载)是数据流转的核心环节。传统观点常将ETL与专业工具或大数据框架绑定,但在中小规模数据场景下,基于SQL的ETL方案凭借低门槛、高可维护性和直观的排错体验,成为高效且务实的选择。本文从ETL的基础概念出发,阐述数据仓库分层(ODS、DWD、DWS、ADS)中每层ETL的定位与职责,重点剖析增量抽取策略(时间戳、主键、日志)下的SQL实现方式,以及数据清洗、去重和格式化的常见写法。同时,结合真实项目经验,分享慢SQL优化技巧、任务调度依赖设计、幂等性保障和常见问题

weixin_33290540的博客 345

destoon 中国银联在线支付接口修改

destoon 的中国银联在线支付接口封装在了 DT_ROOT/api/chinapay/  下面,但是后来银行由原来的 .key升级成了证书,所以现在的destoon中国银联在线支付就不能用了,经过稍加琢磨修改后,依然ok。 【前后变动】 1、参数变动 destoon 原来的参数为: 现在中国银联在线参数变更为:

cyAspNet的专栏 2446

RKNN 端侧部署必看:YOLOv11 Pose 姿态估计模型转换与性能优化实战

随着人工智能技术在边缘计算领域的快速发展,姿态估计作为计算机视觉的重要分支,在智能监控、人机交互、体感游戏等场景中展现出巨大的应用潜力。本文深入研究了YOLOv11 Pose模型在Rockchip RKNN平台上的部署方案,从理论基础、模型转换、平台优化到实际部署进行了全面阐述。通过详细的技术分析和实验验证,证明了RKNN平台能够有效提升YOLOv11 Pose的推理性能,在RK3588硬件平台上实现了高达100 FPS的实时姿态检测,为边缘计算场景下的姿态估计应用提供了高效的解决方案。

m0_71589036的博客 183

PCB仿真软件:Altium Designer_(18).PCB设计中的热管理

在PCB设计中,热管理是一个至关重要的环节。随着电子设备的集成度越来越高,功耗和发热量也随之增加,不合理的热设计可能导致电路板过热,从而影响电路的性能和可靠性。热管理不仅能够提高电路板的使用寿命,还能确保电路在各种环境条件下的稳定工作。本节将详细介绍如何在Altium Designer中进行有效的热管理,包括热分析、热设计和热仿真等关键步骤。

kkchenjj的博客 1984

PHP接入银联在线网关支付

php银联支付,本文介绍的是如何接入中国银联在线网关支付 接入消费接口、接入交易状态查询接口、接入退货接口、测试环境测试银联支付

WXiangQian 6392

修复漏洞Windows 2012 Server R2(CVE-2016-2183)、(CVE-2015-2808)、(CVE-2013-2566)

【代码】修复漏洞Windows 2012 Server R2(CVE-2016-2183)、(CVE-2015-2808)、(CVE-2013-2566)

路~可以走过 2772

华为tsm_华为、中国银联战略合作!独家首发安全支付手机盾

5月15日,中国银联股份有限公司、华为技术有限公司在上海签署战略合作协议。中国银联董事长邵伏军、总裁时文朝,华为轮值董事长胡厚崑、中国地区部副总裁叶长林出席签约仪式。据介绍,达成战略合作后,中国银联、华为将发挥各自领域的专长和优势,升级合作,加强资源整合,推进高效联动,围绕金融支付创新、云计算、大数据、人工智能等领域展开全方位合作,携手打造先进、安全、优质的支付产品及服务,并不断提升支付服务效率和...

weixin_42116650的博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

银联支付是什么支付方式?

涉及到银联支付的国际使用时,中国银联与全球各地的银行和支付网络建立了合作伙伴关系,使得银联支付在国际市场也得到了广泛接受。这意味着持有中国银联标识的银行卡可以在许多国家和地区的商户点使用,而且在一些旅游景点和主要城市,也能轻松找到接受银联支付的地方。如果你打算在国际旅行中使用银联支付,建议在出发前联系自己的银行或者支付网络,了解有关费用、限额和安全使用的信息。值得注意的是,随着时间的推移,银联支付可能会有不同的发展和变化。因此,在使用银联支付前,最好了解最新的支付规则和限制,以确保支付的顺利完成。

M95888的博客 1670

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

手机APP和PC站点接入中国银联支付

准备工作: PC站点: 效果: 选择支付金额,充值平台选择银联支付,点击立即支付按钮: 页面会跳转到银联支付的界面,如下图 输入银行卡号后,银行卡号绑定的手机号码需要获取验证码,如下图: 验证码填写后,确认支付,就代表了支付流程结束。 PC站点采用的是B2C无卡快捷支付方式, 相关的支付PHP demo ...

salestina的博客 909

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

中国银联正式推出在线支付和手机支付业务zt

虽然还是垄断行业的行为,但不得不说这是一个进步,以前作手机/机顶盒行业碰到的支付平台瓶颈,希望借此能够打开。当然安全也是必须的 8 )--tom中国银联正式推出在线支付和手机支付业务今天下午,中国银联正式推出“在线支付”和“互联网手机支付”两项业务。此举意味着银联无卡交易虚拟平台实现了线上线下的综合服务。据了解,此次银联推出的新的在线支付服务,不再局限于面对面的刷卡交易,消费者可通过网络、

TomSi的专栏 1927

PHP商城网站绑定中国银联在线支付接口

PHP商城网站绑定中国银联在线支付接口

weixin_38324478的博客 1847

mycncart 之中国银联在线支付方式

mycncart 之中国银联在线支付方式

wqching的专栏 745

中国银联:将投入30亿元优化线下支付受理环境

中国银联将率先投入30亿元资金,撬动产业各方共同投入资源,在政府主管部门牵头组织下,联合商业银行、收单机构等,将资金用于餐饮及老年人助餐食堂、文旅、宾馆等重点场景完善布放受理终端、张贴受理标识、宣传推广等,加快改造与优化线下刷卡、非接支付受理环境。未来,中国银联还将结合外籍人员支付习惯,重点加强与地方交通等部门沟通,加快解决地铁等出行场景不支持受理银行卡非接支付等问题,优化旅行通卡产品设计,让银联、银行等各类支付产品在各场景通用好用,不断提升外籍来华人员等各类群体支付体验。

AQ3373108495的博客 445
上一篇: 支付宝支付
下一篇: Lucene.NET使用入门(二)【简单的搜索网站示例】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值