protected void Page_Load(object sender, EventArgs e) { Dictionary <string, string> param = new Dictionary <string, string>(); //以下信息非特殊情况不需要改动 param["version"] = SDKConfig.Version; //版本号 param["encoding"] = "UTF-8"; //编码方式 param["txnType"] = "95"; //交易类型 param["txnSubType"] = "00"; //交易子类 param["bizType"] = "000000"; //业务类型 param["signMethod"] = SDKConfig.SignMethod; //签名方法 param["channelType"] = "08"; //渠道类型 param["certType"] = "01"; //01:敏感信息加密公钥(只有01可用) param["accessType"] = "0"; // //TODO 以下信息需要填写 param["merId"] = Request.Form["merId"].ToString(); //商户号,请改自己的测试商户号,此处默认取demo演示页面传递的参数 param["orderId"] = Request.Form["orderId"].ToString(); //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则 param["txnTime"] = Request.Form["txnTime"].ToString(); //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss") //TODO 其他特殊用法请查看 pages/api_05_app/special_use_purchase.htm AcpService.Sign(param, System.Text.Encoding.UTF8); // 签名 string url = SDKConfig.AppRequestUrl; Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8); Response.Write(DemoUtil.GetPrintResult(url, param, rspData)); if (rspData.Count != 0) { if (AcpService.Validate(rspData, System.Text.Encoding.UTF8)) { Response.Write("商户端验证返回报文签名成功。<br>\n"); string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取 if ("00" == respcode) { int resultCode = AcpService.UpdateEncryptCert(rspData, System.Text.Encoding.UTF8); if (resultCode == 1) { Response.Write("加密公钥更新成功"); } else if (resultCode == 0) { Response.Write("加密公钥无更新"); } else { Response.Write("加密公钥更新失败"); } } else { //其他应答码做以失败处理 //TODO Response.Write("失败:" + rspData["respMsg"] + "。<br>\n"); } } else { Response.Write("商户端验证返回报文签名失败。<br>\n"); } } else { Response.Write("请求失败<br>\n"); } }
protected void Page_Load(object sender, EventArgs e) { /** * 重要:联调测试时请仔细阅读注释! * * 产品:二维码支付产品<br> * 交易:文件传输类接口:后台获取对账文件交易,只有同步应答 <br> * 日期: 2015-09<br> * 版权: 中国银联<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测试支持。 * 交易说明: 对账文件的格式请参考《全渠道平台接入接口规范 第3部分 文件接口》 * 对账文件示例见目录file下的802310048993424_20150905.zip * 解析落地后的对账文件可以参考BaseDemo.java中的parseZMFile();parseZMEFile();方法 * */ Dictionary <string, string> param = new Dictionary <string, string>(); //以下信息非特殊情况不需要改动 param["version"] = SDKConfig.Version; //版本号 param["encoding"] = "UTF-8"; //编码方式 param["signMethod"] = SDKConfig.SignMethod; //签名方法 param["txnType"] = "76"; //交易类型 param["txnSubType"] = "01"; //交易子类 param["bizType"] = "000000"; //业务类型 param["accessType"] = "0"; //接入类型 param["channelType"] = "07"; //渠道类型 param["fileType"] = "00"; //文件类型 //TODO 以下信息需要填写 param["merId"] = Request.Form["merId"].ToString(); param["merId"] = Request.Form["merId"].ToString(); //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数 param["txnTime"] = Request.Form["txnTime"].ToString(); //订单发送时间,取北京时间,格式为YYYYMMDDhhmmss,此处默认取demo演示页面传递的参数 param["settleDate"] = Request.Form["settleDate"].ToString(); //清算日期,格式为MMDD,此处默认取demo演示页面传递的参数 AcpService.Sign(param, System.Text.Encoding.UTF8); // 签名 string url = SDKConfig.FileTransUrl; Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8); Response.Write(DemoUtil.GetPrintResult(url, param, rspData)); if (rspData.Count == 0) { Response.Write("请求失败<br>\n"); return; } if (!AcpService.Validate(rspData, System.Text.Encoding.UTF8)) //验签 { Response.Write("商户端验证返回报文签名失败。<br>\n"); return; } Response.Write("商户端验证返回报文签名成功。<br>\n"); string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取 if ("98" == respcode) { //TODO 文件不存在 Response.Write("文件不存在。<br>\n"); return; } else if ("00" != respcode) { //TODO 其他应答码做以失败处理 Response.Write("失败:respcode=" + respcode + "。<br>\n"); return; } Response.Write("返回成功。<br>\n"); // 解析返回文件 string fileContent = rspData["fileContent"]; if (string.IsNullOrEmpty(fileContent)) { Response.Write("fileContent为空,正常不会出现,请确定是否调错接口?<br>\n"); return; } //Base64解码 byte[] dBase64Byte = Convert.FromBase64String(fileContent); //解压缩 byte[] fileByte = SecurityUtil.Inflater(dBase64Byte); string filePath = "D:/file/"; //TODO 【重要】请先确保此路径存在,且有权限写入 if (AcpService.DeCodeFileContent(rspData, filePath)) { Response.Write("文件成功保存到" + filePath + "目录下。<br>\n"); } else { Response.Write("文件保存失败,请看下日志文件中的报错信息。<br>\n"); } //================================================================= //TODO 下面是调用的方法是分析对账文件的样例代码,请按照自己的需要修改并集成到自己的代码中 analyzeFile(filePath, rspData["fileName"]); }
protected void Page_Load(object sender, EventArgs e) { /** * 重要:联调测试时请仔细阅读注释! * 产品:二维码支付<br> * 交易:退货交易:后台资金类交易,有同步应答和后台通知应答<br> * 日期: 2017-02<br> * 版本: 1.0.0 * 版权: 中国银联<br> */ Dictionary <string, string> param = new Dictionary <string, string>(); //以下信息非特殊情况不需要改动 param["version"] = SDKConfig.Version; //版本号 param["encoding"] = "UTF-8"; //编码方式 param["signMethod"] = SDKConfig.SignMethod; // "01";//签名方法 param["txnType"] = "04"; //交易类型 param["txnSubType"] = "00"; //交易子类 param["bizType"] = "000000"; //产品类型 param["channelType"] = "07"; //渠道类型 param["backUrl"] = SDKConfig.BackUrl; // "http://www.specialUrl.com";//后台返回商户结果时使用,根据实际修改‘ param["accessType"] = "0"; //接入类型(0普通商户直接接入) //TODO 以下信息需要填写 param["orderId"] = Request.Form["orderId"].ToString(); //商户订单号,8-32位数字字母,不能含“-”或“_”,可以自行定制规则,重新产生,不同于原消费,此处默认取demo演示页面传递的参数 param["merId"] = Request.Form["merId"].ToString(); //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数 param["txnTime"] = Request.Form["txnTime"].ToString(); //订单发送时间,格式为YYYYMMDDhhmmss,重新产生,不同于原消费,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss") param["txnAmt"] = Request.Form["txnAmt"].ToString(); //交易金额,退货总金额需要小于等于原消费 string origQryId = Request.Form["origQryId"].ToString(); string origOrderId = Request.Form["origOrderId"].ToString(); string origTxnTime = Request.Form["origTxnTime"].ToString(); if (origQryId != "") { param["origQryId"] = origQryId; //原消费的queryId,可以从查询接口或者通知接口中获取,此处默认取demo演示页面传递的参数 } if (origOrderId != "") { param["origOrderId"] = origOrderId; } if (origTxnTime != "") { param["origTxnTime"] = origTxnTime; } AcpService.Sign(param, System.Text.Encoding.UTF8); // 签名 string url = SDKConfig.BackTransUrl; //发送post 请求的地址 Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8); Response.Write(DemoUtil.GetPrintResult(url, param, rspData)); if (rspData.Count != 0) { if (AcpService.Validate(rspData, System.Text.Encoding.UTF8)) { Response.Write("商户端验证返回报文签名成功。<br>\n"); string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取 if ("00" == respcode) { //交易已受理,等待接收后台通知更新订单状态,如果通知长时间未收到也可发起交易状态查询 //TODO Response.Write("受理成功。<br>\n"); } else if ("03" == respcode || "04" == respcode || "05" == respcode) { //后续需发起交易状态查询交易确定交易状态 //TODO Response.Write("处理超时,请稍后查询。<br>\n"); } else { //其他应答码做以失败处理 //TODO Response.Write("失败:" + rspData["respMsg"] + "。<br>\n"); } } else { Response.Write("商户端验证返回报文签名失败。<br>\n"); } } else { Response.Write("请求失败<br>\n"); } }
protected void Page_Load(object sender, EventArgs e) { /** * 产品:二维码支付<br> * 交易:二维码消费(被扫)<br> * 日期: 2017-02<br> * 版权: 中国银联<br> **/ Dictionary <string, string> param = new Dictionary <string, string>(); //以下信息非特殊情况不需要改动 param["version"] = SDKConfig.Version; //版本号 param["encoding"] = "UTF-8"; //编码方式 param["signMethod"] = SDKConfig.SignMethod; // "01";//签名方法 param["txnType"] = "01"; //交易类型 param["txnSubType"] = "06"; //交易子类 param["bizType"] = "000000"; //产品类型 param["channelType"] = "07"; //渠道类型 param["backUrl"] = SDKConfig.BackUrl; // "http://www.specialUrl.com"; param["accessType"] = "0"; //接入类型(0普通商户直接接入) param["accType"] = "01"; //账号类型(01银行卡) param["currencyCode"] = "156"; //交易币种 // param["reserved"] = "";//保留域 //TODO 以下信息需要填写 param["merId"] = Request.Form["merId"].ToString(); //商户号,请改自己的测试商户号,此处默认取demo演示页面传递的参数 param["orderId"] = Request.Form["orderId"].ToString(); //商户订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数,可以自行定制规则 param["txnTime"] = Request.Form["txnTime"].ToString(); //订单发送时间,格式为YYYYMMDDhhmmss,取北京时间,此处默认取demo演示页面传递的参数,参考取法: DateTime.Now.ToString("yyyyMMddHHmmss") param["txnAmt"] = Request.Form["txnAmt"].ToString(); //交易金额,单位分,此处默认取demo演示页面传递的参数 param["qrNo"] = Request.Form["qrNo"].ToString(); //二维码 编号,此处默认取demo演示页面传递的参数 param["termId"] = Request.Form["termId"].ToString(); //终端号 //param["reqReserved"] = "透传信息";//请求方保留域,透传字段,查询、通知、对账文件中均会原样出现,如有需要请启用并修改自己希望透传的数据 //TODO 其他特殊用法请查看 pages/api_01_gateway/special_use_purchase.htm AcpService.Sign(param, System.Text.Encoding.UTF8); // 签名 string url = SDKConfig.BackTransUrl; //发送post 请求的地址 Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8); Response.Write(DemoUtil.GetPrintResult(url, param, rspData)); if (rspData.Count != 0) { if (AcpService.Validate(rspData, System.Text.Encoding.UTF8)) { Response.Write("商户端验证返回报文签名成功。<br>\n"); string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取 if ("00" == respcode) { //交易已受理,等待接收后台通知更新订单状态,如果通知长时间未收到也可发起交易状态查询 //TODO Response.Write("受理成功。<br>\n"); } else if ("03" == respcode || "04" == respcode || "05" == respcode) { //后续需发起交易状态查询交易确定交易状态 //TODO Response.Write("处理超时,请稍后查询。<br>\n"); } else { //其他应答码做以失败处理 //TODO Response.Write("失败:" + rspData["respMsg"] + "。<br>\n"); } } else { Response.Write("商户端验证返回报文签名失败。<br>\n"); } } else { Response.Write("请求失败<br>\n"); } }
protected void Page_Load(object sender, EventArgs e) { /** * 产品:二维码支付产品<br> * 交易:交易状态查询交易:只有同步应答 <br> * 日期: 2015-09<br> * 版权: 中国银联<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测试支持。 * 交易说明:代付同步返回00,如果未收到后台通知建议3分钟后发起查询交易,可查询N次(不超过6次),每次时间间隔2N秒发起,即间隔1,2,4,8,16,32S查询(查询到03 04 05 01 12 34 60继续查询,否则终止查询)。【如果最终尚未确定交易是否成功请以对账文件为准】 * 代付同步返03 04 05 01 12 34 60响应码及未得到银联响应(读超时)建议3分钟后发起查询交易,可查询N次(不超过6次),每次时间间隔2N秒发起,即间隔1,2,4,8,16,32S查询(查询到03 04 05 01 12 34 60继续查询,否则终止查询)。【如果最终尚未确定交易是否成功请以对账文件为准】 */ Dictionary <string, string> param = new Dictionary <string, string>(); //以下信息非特殊情况不需要改动 param["version"] = SDKConfig.Version; //版本号 param["encoding"] = "UTF-8"; //编码方式 param["signMethod"] = SDKConfig.SignMethod; //签名方法 param["txnType"] = "00"; //交易类型 param["txnSubType"] = "00"; //交易子类 param["bizType"] = "000000"; //业务类型 param["accessType"] = "0"; //接入类型 param["channelType"] = "07"; //渠道类型 //TODO 以下信息需要填写 param["orderId"] = Request.Form["orderId"].ToString(); //请修改被查询的交易的订单号,8-32位数字字母,不能含“-”或“_”,此处默认取demo演示页面传递的参数 param["merId"] = Request.Form["merId"].ToString(); //商户代码,请改成自己的测试商户号,此处默认取demo演示页面传递的参数 param["txnTime"] = Request.Form["txnTime"].ToString(); //请修改被查询的交易的订单发送时间,格式为YYYYMMDDhhmmss,此处默认取demo演示页面传递的参数 AcpService.Sign(param, System.Text.Encoding.UTF8); // 签名 string url = SDKConfig.SingleQueryUrl; Dictionary <String, String> rspData = AcpService.Post(param, url, System.Text.Encoding.UTF8); Response.Write(DemoUtil.GetPrintResult(url, param, rspData)); if (rspData.Count != 0) { if (AcpService.Validate(rspData, System.Text.Encoding.UTF8)) { Response.Write("商户端验证返回报文签名成功。<br>\n"); string respcode = rspData["respCode"]; //其他应答参数也可用此方法获取 if ("00" == respcode) { string origRespCode = rspData["origRespCode"]; //其他应答参数也可用此方法获取 //处理被查询交易的应答码逻辑 if ("00" == origRespCode) { //交易成功,更新商户订单状态 //TODO Response.Write("交易成功。<br>\n"); } else if ("03" == origRespCode || "04" == origRespCode || "05" == origRespCode || "01" == origRespCode || "12" == origRespCode || "34" == origRespCode || "60" == origRespCode) { //需再次发起交易状态查询交易 //TODO Response.Write("稍后查询。<br>\n"); } else { //其他应答码做以失败处理 //TODO Response.Write("交易失败:" + rspData["origRespMsg"] + "。<br>\n"); } } else if ("03" == respcode || "04" == respcode || "05" == respcode) { //不明原因超时,后续继续发起交易查询。 //TODO Response.Write("处理超时,请稍后查询。<br>\n"); } else { //其他应答码做以失败处理 //TODO Response.Write("查询操作失败:" + rspData["respMsg"] + "。<br>\n"); } } } else { Response.Write("请求失败\n"); } }