银联支付

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万+

西门子【Automation Framework V1.2】AF架构:从软件栈到高效自动化项目的构建蓝图

本文深入解析西门子Automation Framework V1.2 (AF架构) 的核心价值与实施蓝图。该框架通过定义标准化的软件栈(如TIA Portal V19、STEP7、WinCC Unified)和严格的安装配置流程,将自动化项目开发从依赖个人经验的“手工作坊”模式,转变为高效、可复制的工业化模式。遵循此架构,工程师能快速构建稳定可靠的项目基础,规避环境冲突,从而专注于核心工艺与逻辑设计,大幅提升团队协作与项目交付效率。

weixin_29230059的博客 428

银联支付(网银h5)

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

jmkweb的博客 7889

基于freesurfer和3Dslicer的脑区分割与电极定位全流程解析(实战指南)

本文提供了一套基于FreeSurfer和3D Slicer的颅内电极定位实战指南。详细解析了从环境搭建、数据预处理、FreeSurfer脑区分割、影像配准,到3D Slicer中手动与自动化电极定位的全流程。重点介绍了如何利用FreeSurfer进行高精度脑区分割,并在3D Slicer中实现电极触点的可视化标记与坐标提取,最终获得带脑区信息的电极数据,为iEEG/SEEG研究奠定基础。

banana的博客 298

Cadence Allegro 17.4学习记录开始01-原理图Capture CIS 17.4

Orcad的学习记录

qq_31444421的博客 1万+

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

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

huaweichenai的博客 4083

声音特征提取--Demon谱分析(舰船水声)

不同频带的DEMON谱线相互之间也不一样,有的频带内会发生线谱遗失,有的频带内的线谱并不是真正的谱线。当舰船航速达到某个极限时,螺旋桨的高速旋转将产生空化噪声,由螺旋桨产生的一系列周期信号被空化噪声调制,在频域上表现为将低频的离散线谱线性搬移到较高频率噪声所处的频率周围,这些周期信号在频域是离散的线谱系列,对应舰船的轴频、叶频以及谐波频率,由于舰船辐射噪声低频部分还有其它噪声源,很难从低频段直接提取出螺旋桨产生的线谱系列,而是要先对高频段的调制信号进行解调,通过低通滤波得到信号的低频包络谱,即。

qq_52631753的博客 6500

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

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

cyAspNet的专栏 2446

借助AI高效写出结构严谨、内容专业的课题申报书:10大核心模块拆解(附实用提示词)

在很多老师和科研人员眼中,写一份高质量的课题申报,确实是一件非常困难的事。难就难在不只是要说清楚写了什么研究内容,还要体现申报书的可行性和创新性。七哥除了自己写课题,也经常指导会员同仁使用高级学术版搞定课题的申报工作,摸索出了一套行之有效的借助AI申报课题的技巧,在这篇文章中,我将给大家点明课题申报书的10大核心模块的写作技巧,还会给大家一些提示词模板供大家参考,如果你也正准备申报课题,那么这篇文章一定不要错过!特别说明的是,提示词的使用并不是一蹴而就的,是专业思考的延伸和AI化专业表达,过程中需要多次的调

智能AI让学术科研更容易 441

【Linux】Windows11 安装 WSL2 并运行 Ubuntu 22.04 详细操作步骤

Windows 11 安装 WSL2 和 Ubuntu 22.04 指南 本文详细介绍在 Windows 11 上安装 WSL2 和 Ubuntu 22.04 的完整步骤,包括: WSL2 与 VirtualBox 的性能对比优势 系统版本检查与升级方法 两种安装方式(一键安装和手动安装) Ubuntu 22.04 的安装与配置 存储位置管理及迁移技巧 常用 WSL2 命令速查表 文章还提供了性能优化建议和常见问题解决方案,适合开发者和 Linux 爱好者快速搭建高效的开发环境。

No8g攻城狮的博客 2万+

PHP接入银联在线网关支付

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

WXiangQian 6392

AI赋能合同审查:构建租赁合同智能审核系统的全流程解析

在商业地产、设备租赁等场景中,合同审核效率直接影响业务流转速度。传统人工审核存在三大痛点:审核周期长(平均2-3个工作日)、合规风险高(条款遗漏率约15%)、人力成本居高不下。智能审核系统可将审核时间压缩至秒级,风险识别准确率提升至98%以上。

理论都是虚的,代码才是王道。 1355

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

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

weixin_42116650的博客 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

M95888的博客 1670

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

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

salestina的博客 909

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

中国银联正式推出在线支付和手机支付业务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、付费专栏及课程。

余额充值