protected void Page_Load(object sender, EventArgs e) { //获取反馈信息 string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string notify_type = Request.Form["notify_type"].ToString().Trim(); string notify_id = Request.Form["notify_id"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string zhfsign = Request.Form["sign"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string extra_return_param = Request.Form["extra_return_param"]; string orginal_money = Request.Form["orginal_money"]; string trade_no = Request.Form["trade_no"].ToString().Trim(); string trade_time = Request.Form["trade_time"].ToString().Trim(); string trade_status = Request.Form["trade_status"].ToString().Trim(); string bank_seq_no = Request.Form["bank_seq_no"]; /** *签名顺序按照参数名a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推, *参数名1=参数值1&参数名2=参数值2&……&参数名n=参数值n&key=key值 **/ //组织订单信息 string signStr = ""; if (null != bank_seq_no && bank_seq_no != "") { signStr = signStr + "bank_seq_no=" + bank_seq_no.ToString().Trim() + "&"; } if (null != extra_return_param && extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } signStr = signStr + "interface_version" + orginal_money + "&"; signStr = signStr + "merchant_code=" + merchant_code + "&"; if (null != notify_id && notify_id != "") { signStr = signStr + "notify_id=" + notify_id + "¬ify_type=" + notify_type + "&"; } signStr = signStr + "order_amount=" + order_amount + "&"; signStr = signStr + "order_no=" + order_no + "&"; signStr = signStr + "order_time=" + order_time + "&"; if (null != orginal_money && orginal_money != "") { signStr = signStr + "orginal_money=" + orginal_money + "&"; } signStr = signStr + "trade_no=" + trade_no + "&"; signStr = signStr + "trade_status=" + trade_status + "&"; if (null != trade_time && trade_time != "") { signStr = signStr + "trade_time=" + trade_time; } if (sign_type == "RSA-S") //RSA-S的验签方法 { /** * 1)zhf_public_key,公钥,每个商家对应一个固定的公钥(不是使用工具生成的密钥merchant_public_key,不要混淆), * 即为商家后台"公钥管理"->"公钥"里的绿色字符串内容 * 2)demo提供的zhf_public_key是测试商户号1111110166的公钥,请自行复制对应商户号的公钥进行调整和替换。 */ string zhf_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCd4i4BtmXnogBHxB0j6jCcmW4YvZgCE9UKBNbEiKAe4RfzeylNo9f3uT/ceJA1/hG/x/ZmfsUtKwOwOe14uYQt9RuaFfu3FE/daMqC63wQmMIQox3HZ0b0BwefO1ax7Tjl3aW0QGQTzy4dZVLhfqoxVALGiE84CwRC2/S6y/cWfQIDAQAB"; //将公钥转换成C#专用格式 zhf_public_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(zhf_public_key); //验签 bool result = testOrder.HttpHelp.ValidateRsaSign(signStr, zhf_public_key, zhfsign); if (result == true) { //注:建议页面同步通知一般只做订单支付成功提示,而不做订单支付状态更新,更新订单支付状态在notify_url指定的地址处理,请做好订单是否重复修改状态的判断,以免虚拟充值重复到账!! Response.Write("验签成功"); } else { //验签失败 Response.Write("验签失败"); } } else //RSA验签方法 { string merPubKeyDir = "D:/1111110166.pfx"; string password = "******"; RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); bool result = rsaWithH.VerifySign("1111110166", signStr, zhfsign); if (result == true) { //注:建议页面同步通知一般只做订单支付成功提示,而不做订单支付状态更新,更新订单支付状态在notify_url指定的地址处理,请做好订单是否重复修改状态的判断,以免虚拟充值重复到账!! Response.Write("验签成功"); } else { //验签失败 Response.Write("验签失败"); } } }
protected void Page_Load(object sender, EventArgs e) { //获取反馈信息 string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string notify_type = Request.Form["notify_type"].ToString().Trim(); string notify_id = Request.Form["notify_id"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string zhfsign = Request.Form["sign"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string extra_return_param = Request.Form["extra_return_param"]; string trade_no = Request.Form["trade_no"].ToString().Trim(); string trade_time = Request.Form["trade_time"].ToString().Trim(); string trade_status = Request.Form["trade_status"].ToString().Trim(); string bank_seq_no = Request.Form["bank_seq_no"]; /** *签名顺序按照参数名a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推, *参数名1=参数值1&参数名2=参数值2&……&参数名n=参数值n&key=key值 **/ //组织订单信息 string signStr = ""; if (null != bank_seq_no && bank_seq_no != "") { signStr = signStr + "bank_seq_no=" + bank_seq_no.ToString().Trim() + "&"; } if (null != extra_return_param && extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } signStr = signStr + "interface_version=V3.0" + "&"; signStr = signStr + "merchant_code=" + merchant_code + "&"; if (null != notify_id && notify_id != "") { signStr = signStr + "notify_id=" + notify_id + "¬ify_type=" + notify_type + "&"; } signStr = signStr + "order_amount=" + order_amount + "&"; signStr = signStr + "order_no=" + order_no + "&"; signStr = signStr + "order_time=" + order_time + "&"; signStr = signStr + "trade_no=" + trade_no + "&"; signStr = signStr + "trade_status=" + trade_status + "&"; if (null != trade_time && trade_time != "") { signStr = signStr + "trade_time=" + trade_time; } if (sign_type == "RSA-S") //RSA-S的验签方法 { /** * 1)zhf_public_key,公钥,每个商家对应一个固定的公钥(不是使用工具生成的密钥merchant_public_key,不要混淆), * 即为商家后台"公钥管理"->"公钥"里的绿色字符串内容 * 2)demo提供的zhf_public_key是测试商户号800004007888的公钥,请自行复制对应商户号的公钥进行调整和替换。 */ string zhf_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZDDIp0i3Ai7hskWs03M8n9QXrz3FX+KXak/zhy+rO7IBCE2p7mqHgMzj2KTqPfeQyAJoF6WvNy9MT9Vf/MA1mcYpYp9vVXRlLZ9oCFGUHtL2VJJHPzKlit46OGhyU7z/jtWwDuRXqcO76+VPi0/1XOvsyR5lTDKB3LVQA4cPD3wIDAQAB"; //将公钥转换成C#专用格式 zhf_public_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(zhf_public_key); //验签 bool result = testOrder.HttpHelp.ValidateRsaSign(signStr, zhf_public_key, zhfsign); if (result == true) { //注:建议页面同步通知一般只做订单支付成功提示,而不做订单支付状态更新,更新订单支付状态在notify_url指定的地址处理,请做好订单是否重复修改状态的判断,以免虚拟充值重复到账!! Response.Write("验签成功"); } else { //验签失败 Response.Write("验签失败"); } } else //RSA验签方法 { string merPubKeyDir = "D:/800004007888.pfx"; string password = "******"; RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); bool result = rsaWithH.VerifySign("800004007888", signStr, zhfsign); if (result == true) { //注:建议页面同步通知一般只做订单支付成功提示,而不做订单支付状态更新,更新订单支付状态在notify_url指定的地址处理,请做好订单是否重复修改状态的判断,以免虚拟充值重复到账!! Response.Write("验签成功"); } else { //验签失败 Response.Write("验签失败"); } } }
protected void Back_Load(object sender, EventArgs e) { //获取中鼎融反馈信息 string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string notify_id = Request.Form["notify_id"].ToString().Trim(); string notify_type = Request.Form["notify_type"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string dinpaysign = Request.Form["sign"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string extra_return_param = Request.Form["extra_return_param"].ToString().Trim(); string trade_no = Request.Form["trade_no"].ToString().Trim(); string trade_time = Request.Form["trade_time"].ToString().Trim(); string trade_status = Request.Form["trade_status"].ToString().Trim(); string bank_seq_no = Request.Form["bank_seq_no"].ToString().Trim(); /** *签名顺序按照参数名a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推, *同时将商家支付密钥key放在最后参与签名,组成规则如下: *参数名1=参数值1&参数名2=参数值2&……&参数名n=参数值n **/ //组织订单信息 string signStr = ""; if (bank_seq_no != "") { signStr = signStr + "bank_seq_no=" + bank_seq_no + "&"; } if (extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } if (interface_version != "") { signStr = signStr + "interface_version=" + interface_version + "&"; } if (merchant_code != "") { signStr = signStr + "merchant_code=" + merchant_code + "&"; } if (notify_id != "") { signStr = signStr + "notify_id=" + notify_id + "&"; } if (notify_type != "") { signStr = signStr + "notify_type=" + notify_type + "&"; } if (order_amount != "") { signStr = signStr + "order_amount=" + order_amount + "&"; } if (order_no != "") { signStr = signStr + "order_no=" + order_no + "&"; } if (order_time != "") { signStr = signStr + "order_time=" + order_time + "&"; } if (trade_no != "") { signStr = signStr + "trade_no=" + trade_no + "&"; } if (trade_status != "") { signStr = signStr + "trade_status=" + trade_status + "&"; } if (trade_time != "") { signStr = signStr + "trade_time=" + trade_time + "&"; } if (sign_type == "RSA-S") //RSA-S的验签方法 { //使用中鼎融公钥对返回的数据验签 string dinpay_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTE8YBexrEmn8oEqsASVgkZEUo/WTqKZlmr0MYDyIVgcNfvXJPUR9kD46RAT11UYKK681UI0IWcfi/uB+bL00bVzuW7x5YdT5zdDuca/i3H3MIbWMcAHXAqPQt38Z0yWoXoCJp0IZ975vBVSe/a70M7uh1aLSapQFKyUCO2i3hGwIDAQAB"; //将中鼎融公钥转换成C#专用格式 dinpay_public_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(dinpay_public_key); //验签 bool result = testOrder.HttpHelp.ValidateRsaSign(signStr, dinpay_public_key, dinpaysign); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后打印SUCCESS Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } else //RSA验签方法 { string merPubKeyDir = "D:/108008008666.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化(version路径需跟证书一致,证书会自动生成version) //验签 bool result = rsaWithH.VerifySign("108008008666", signStr, dinpaysign); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后必须打印SUCCESS来响应中鼎融服务器以示商户已经正常收到中鼎融服务器发送的异步数据通知,否则中鼎融服务器将会在之后的时间内若干次发送同一笔订单的异步数据!! Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string interface_version = Request.Form["interface_version"].ToString().Trim(); string input_charset = Request.Form["input_charset"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string bank_code = Request.Form["bank_code"].ToString().Trim(); string card_type = Request.Form["card_type"].ToString().Trim(); string card_no = Request.Form["card_no"].ToString().Trim(); string mobile = Request.Form["mobile"].ToString().Trim(); string merchant_sign_id = Request.Form["merchant_sign_id"].ToString().Trim(); ////////////////组装签名///////////////// string signStr = ""; signStr = "bank_code=" + bank_code + "&card_no=" + card_no + "&card_type=" + card_type + "&input_charset=" + input_charset + "&interface_version=" + interface_version + "&merchant_code=" + merchant_code; if (merchant_sign_id != "") { signStr = signStr + "&merchant_sign_id=" + merchant_sign_id; } signStr = signStr + "&mobile=" + mobile + "&service_type=" + service_type; if (sign_type == "RSA-S")//RSA-S签名方法 { //商家私钥 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALf/+xHa1fDTCsLYPJLHy80aWq3djuV1T34sEsjp7UpLmV9zmOVMYXsoFNKQIcEzei4QdaqnVknzmIl7n1oXmAgHaSUF3qHjCttscDZcTWyrbXKSNr8arHv8hGJrfNB/Ea/+oSTIY7H5cAtWg6VmoPCHvqjafW8/UP60PdqYewrtAgMBAAECgYEAofXhsyK0RKoPg9jA4NabLuuuu/IU8ScklMQIuO8oHsiStXFUOSnVeImcYofaHmzIdDmqyU9IZgnUz9eQOcYg3BotUdUPcGgoqAqDVtmftqjmldP6F6urFpXBazqBrrfJVIgLyNw4PGK6/EmdQxBEtqqgXppRv/ZVZzZPkwObEuECQQDenAam9eAuJYveHtAthkusutsVG5E3gJiXhRhoAqiSQC9mXLTgaWV7zJyA5zYPMvh6IviX/7H+Bqp14lT9wctFAkEA05ljSYShWTCFThtJxJ2d8zq6xCjBgETAdhiH85O/VrdKpwITV/6psByUKp42IdqMJwOaBgnnct8iDK/TAJLniQJABdo+RodyVGRCUB2pRXkhZjInbl+iKr5jxKAIKzveqLGtTViknL3IoD+Z4b2yayXg6H0g4gYj7NTKCH1h1KYSrQJBALbgbcg/YbeU0NF1kibk1ns9+ebJFpvGT9SBVRZ2TjsjBNkcWR2HEp8LxB6lSEGwActCOJ8Zdjh4kpQGbcWkMYkCQAXBTFiyyImO+sfCccVuDSsWS+9jrc5KadHGIvhfoRjIj2VuUKzJ+mXbmXuXnOYmsAefjnMCI6gGtaqkzl527tw="; //私钥转换成C#专用私钥 merchant_private_key = testOrder.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrder.HttpHelp.RSASign(signStr, merchant_private_key); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到Dinpay网关 string _xml = testOrder.HttpHelp.HttpPost("https://api.yuanruic.com/gateway/api/express", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将XML中的参数逐个提取出来 //Response.Write(_xml); var sign_status1 = el.XPathSelectElement("/response/sign_status"); var merchant_sign_id1 = el.XPathSelectElement("/response/merchant_sign_id"); //去掉首尾的标签并转换成string string sign_status = Regex.Match(sign_status1.ToString(), "(?<=>).*?(?=<)").Value; string merchant_sign_id2 = Regex.Match(merchant_sign_id1.ToString(), "(?<=>).*?(?=<)").Value; if (sign_status == "0") { Response.Write("已签约"); Response.Write(merchant_sign_id2); } if (sign_status == "1") { Response.Write("已解约"); } if (sign_status == "2") { var pay_model1 = el.XPathSelectElement("/response/sign_status"); string pay_mode = Regex.Match(pay_model1.ToString(), "(?<=>).*?(?=<)").Value; if (pay_mode == "0") { Response.Write("API签约"); } else { Response.Write("WEB网页签约"); } } } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/200001001888.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化(version路径需跟证书一致,证书会自动生成version) string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到Dinpay网关 string _xml = testOrder.HttpHelp.HttpPost("https://api.yuanruic.com/gateway/api/express", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将XML中的参数逐个提取出来 var sign_status1 = el.XPathSelectElement("/response/sign_status"); var merchant_sign_id1 = el.XPathSelectElement("/response/merchant_sign_id"); //去掉首尾的标签并转换成string string sign_status = Regex.Match(sign_status1.ToString(), "(?<=>).*?(?=<)").Value; string merchant_sign_id2 = Regex.Match(merchant_sign_id1.ToString(), "(?<=>).*?(?=<)").Value; if (sign_status == "0") { Response.Write("已签约"); Response.Write(merchant_sign_id2); } if (sign_status == "1") { Response.Write("已解约"); } if (sign_status == "2") { var pay_model1 = el.XPathSelectElement("/response/sign_status"); string pay_mode = Regex.Match(pay_model1.ToString(), "(?<=>).*?(?=<)").Value; if (pay_mode == "0") { Response.Write("API签约"); } else { Response.Write("WEB网页签约"); } } } } finally{ } }
protected void Page_Load(object sender, EventArgs e) { //获取反馈信息 string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string notify_type = Request.Form["notify_type"].ToString().Trim(); string notify_id = Request.Form["notify_id"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string zhfsign = Request.Form["sign"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string extra_return_param = Request.Form["extra_return_param"]; string trade_no = Request.Form["trade_no"].ToString().Trim(); string trade_time = Request.Form["trade_time"].ToString().Trim(); string trade_status = Request.Form["trade_status"].ToString().Trim(); string bank_seq_no = Request.Form["bank_seq_no"]; /** *签名顺序按照参数名a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推, *参数名1=参数值1&参数名2=参数值2&……&参数名n=参数值n&key=key值 **/ //组织订单信息 string signStr = ""; if (null != bank_seq_no && bank_seq_no != "") { signStr = signStr + "bank_seq_no=" + bank_seq_no.ToString().Trim() + "&"; } if (null != extra_return_param && extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } signStr = signStr + "interface_version=V3.0" + "&"; signStr = signStr + "merchant_code=" + merchant_code + "&"; if (null != notify_id && notify_id != "") { signStr = signStr + "notify_id=" + notify_id + "¬ify_type=" + notify_type + "&"; } signStr = signStr + "order_amount=" + order_amount + "&"; signStr = signStr + "order_no=" + order_no + "&"; signStr = signStr + "order_time=" + order_time + "&"; signStr = signStr + "trade_no=" + trade_no + "&"; signStr = signStr + "trade_status=" + trade_status + "&"; if (null != trade_time && trade_time != "") { signStr = signStr + "trade_time=" + trade_time; } if (sign_type == "RSA-S") //RSA-S的验签方法 { /** * 1)zhf_public_key,公钥,每个商家对应一个固定的公钥(不是使用工具生成的密钥merchant_public_key,不要混淆), * 即为商家后台"公钥管理"->"公钥"里的绿色字符串内容 * 2)demo提供的zhf_public_key是测试商户号100100101102的公钥,请自行复制对应商户号的公钥进行调整和替换。 */ string zhf_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCP2DxiRIhY5JCpeQDQO9oJJ5iyZ/HviNzTY23N6XEp+P4tacdftFsgwh1DoR4Qa8MI5Lrmb2WTBlFsybLqM9LYLeBvODokFdAdoi+VOjkESJ4Y8XygiP4Sz7osOwB3MkvLVHAK8e2O8U09Sj2MI034snHvnhCpU3ye3BqkzetLkQIDAQAB"; //将公钥转换成C#专用格式 zhf_public_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(zhf_public_key); //验签 bool result = testOrder.HttpHelp.ValidateRsaSign(signStr, zhf_public_key, zhfsign); if (result == true) { //注:建议页面同步通知一般只做订单支付成功提示,而不做订单支付状态更新,更新订单支付状态在notify_url指定的地址处理,请做好订单是否重复修改状态的判断,以免虚拟充值重复到账!! Response.Write("验签成功"); } else { //验签失败 Response.Write("验签失败"); } } else //RSA验签方法 { string merPubKeyDir = "D:/100100101102.pfx"; string password = "******"; RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); bool result = rsaWithH.VerifySign("100100101102", signStr, zhfsign); if (result == true) { //注:建议页面同步通知一般只做订单支付成功提示,而不做订单支付状态更新,更新订单支付状态在notify_url指定的地址处理,请做好订单是否重复修改状态的判断,以免虚拟充值重复到账!! Response.Write("验签成功"); } else { //验签失败 Response.Write("验签失败"); } } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string interface_version = Request.Form["interface_version"].ToString().Trim(); string input_charset = Request.Form["input_charset"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string notify_url = Request.Form["notify_url"].ToString().Trim(); string merchant_sign_id = Request.Form["merchant_sign_id"].ToString().Trim(); string card_type = Request.Form["card_type"].ToString().Trim(); string mobile = Request.Form["mobile"].ToString().Trim(); string sms_trade_no = Request.Form["sms_trade_no"].ToString().Trim(); string sms_code = Request.Form["sms_code"].ToString().Trim(); string bank_code = Request.Form["bank_code"].ToString().Trim(); string product_name = Request.Form["product_name"].ToString().Trim(); string product_code = Request.Form["product_code"].ToString().Trim(); string product_num = Request.Form["product_num"].ToString().Trim(); string product_desc = Request.Form["product_desc"].ToString().Trim(); string card_no = Request.Form["card_no"].ToString().Trim(); string card_name = Request.Form["card_name"].ToString().Trim(); string id_no = Request.Form["id_no"].ToString().Trim(); string card_cvv2 = Request.Form["card_cvv2"].ToString().Trim(); string card_exp_date = Request.Form["card_exp_date"].ToString().Trim(); string encrypt_info = card_no + "|" + card_name + "|" + id_no; //组装敏感数据 ////使用公钥对卡号和卡密加密【公钥需从商家后台-公钥管理中取出】////////// string encryption_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCbT0QjejG8pj8y/HfmzL7j9gHFKTwSg68ZiOad4ErxkSi/N77HnG+scCXVnkvvBwPTFI35AStGQnv3E/7XeCO8swvVR8J4w/k5JfQwcHnSk64DD0L+0KH6cRN27WZYdL9n4r+jW6OXILnbw0t1YM0/y6cOCc4R8yyd1hTCdgP3LwIDAQAB"; //////////将公钥转换成C#专用格式/////////// encryption_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(encryption_key); //加密后的卡号密码 string encrypt_info_result = testOrder.HttpHelp.RSAEncrypt(encrypt_info, encryption_key); ////////////////组装签名///////////////// string signStr = ""; if (bank_code != "") { signStr = signStr + "bank_code=" + bank_code; } if (card_type != "") { signStr = signStr + "&card_type=" + card_type; } if (bank_code != "") { signStr = signStr + "&encrypt_info=" + encrypt_info + "&"; } signStr = signStr + "input_charset=" + input_charset + "&interface_version=" + interface_version + "&merchant_code=" + merchant_code; if (merchant_sign_id != "") { signStr = signStr + "&merchant_sign_id=" + merchant_sign_id; } signStr = signStr + "&mobile=" + mobile + "¬ify_url=" + notify_url + "&order_amount=" + order_amount + "&order_no=" + order_no + "&order_time=" + order_time + "&product_name=" + product_name + "&service_type=" + service_type + "&sms_code=" + sms_code + "&sms_trade_no=" + sms_trade_no; if (sign_type == "RSA-S")//RSA-S签名方法 { //商家私钥 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOD/K22eGec3qNQmk9LwsjpbJDJE9JYfsTJJQGJhfWsKbcZ9UISKXZxuhSCVaf2z9/pEln5RoE7GNwOrYv8R00P8nRJONHNPaLcf0Y8+c6DBWGVewZKojUzn18uAEGGW5XMjLs5/OU//opRB4ieeSmBJ4jp954XfR4Z57bjOpe/3AgMBAAECgYEArCr2K2JQxfp0aSq/8SkX6Mm3T/QuCPZlXGprJx0coJ0RVVKtG07ZxQtZOY671VQyjEKRukVx2vWYQWmTTkVwl+U71fh1mmiu00Y3odNoERc02ZN0zJmrSuhbcuEv6F8kBATunB55wOZ3jlbkXD9h+KUyePBOkrPb+81LhJ6kZXkCQQD18nQ1U2m9laS8ROJmZ1LuecQ4maaHW3xFxHoM9sS1YcpB3peQuXBrKa483zYADIJV2NYstc0QXMMZIXleKFFzAkEA6jF+xx4q+p/lhH8M3rHucHmkgFce90Jh1eHTdx5czizl3LiOYZ5D7cNL8x7piJDMmzkVz8+OidXm0wf5aT82bQJAP9TSJjjk26hn3dj+7Vbppi0CKTJvjvfGdBD/IDg3a1/a72eG7K/EJnvl1bSUvkSA2yjwxR/V/eYlWHNgnXhXUwJBANA6h+3FfhNvXmSrjqbncAljrwdJ70eMJ29DpoFQZtYPB6Z0FmzniqB6OCqIPr7leHc/j4xBkQwvO1hBy9pvkRUCQEVOGouGVeiXL/MuupUdbdBSV4nkYb9hrqE11gzbLu4A+OCpV8Xwdqu5SqX9Js1mQ6vQwTHu63vyfpxxl7oN9Jw="; //私钥转换成C#专用私钥 merchant_private_key = testOrder.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrder.HttpHelp.RSASign(signStr, merchant_private_key); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //将加密后的卡号卡密进行UrlEncode编码 encrypt_info_result = HttpUtility.UrlEncode(encrypt_info_result); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到Dinpay网关 string _xml = testOrder.HttpHelp.HttpPost("https://api.zdfmf.com/gateway/api/express", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将XML中的参数逐个提取出来 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchant_code1 = el.XPathSelectElement("/response/merchant_code"); var trade_no1 = el.XPathSelectElement("/response/trade_no"); var order_no1 = el.XPathSelectElement("/response/order_no"); var merchant_sign_id1 = el.XPathSelectElement("/response/merchant_sign_id"); var trade_status1 = el.XPathSelectElement("/response/trade_status"); var trade_time1 = el.XPathSelectElement("/response/trade_time"); var dinpaysign1 = el.XPathSelectElement("/response/sign"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; if (is_success == "F") { Response.Write("获取失败"); Response.Write(_xml); Response.End(); } string merchant_code2 = Regex.Match(merchant_code1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no2 = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string order_no2 = Regex.Match(order_no1.ToString(), "(?<=>).*?(?=<)").Value; string merchant_sign_id2 = Regex.Match(merchant_sign_id1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status2 = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string trade_time2 = Regex.Match(trade_time1.ToString(), "(?<=>).*?(?=<)").Value; string dinpaysign = Regex.Match(dinpaysign1.ToString(), "(?<=>).*?(?=<)").Value; //组装验签字符串 string signsrc = "is_success=" + is_success + "&merchant_code=" + merchant_code2 + "&merchant_sign_id=" + merchant_sign_id2 + "&order_no=" + order_no2 + "&trade_no=" + trade_no2 + "&trade_status=" + trade_status2 + "&trade_time=" + trade_time2; //使用公钥对返回的数据验签 bool validateResult = testOrder.HttpHelp.ValidateRsaSign(signsrc, encryption_key, dinpaysign); if (validateResult == false) { Response.Write("验签失败"); Response.End(); } Response.Write("结果:" + signsrc + "<br/>"); Response.Write("验签结果:" + validateResult + "<br/>"); //Response.End() } else //RSA签名方式 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/800004007888.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化(version路径需跟证书一致,证书会自动生成version) string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //将加密后的卡号卡密进行UrlEncode编码 encrypt_info_result = HttpUtility.UrlEncode(encrypt_info_result); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到Dinpay网关 string _xml = testOrder.HttpHelp.HttpPost("https://api.zdfmf.com/gateway/api/express", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将XML中的参数逐个提取出来 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchant_code1 = el.XPathSelectElement("/response/merchant_code"); var trade_no1 = el.XPathSelectElement("/response/trade_no"); var order_no1 = el.XPathSelectElement("/response/order_no"); var merchant_sign_id1 = el.XPathSelectElement("/response/merchant_sign_id"); var trade_status1 = el.XPathSelectElement("/response/trade_status"); var trade_time1 = el.XPathSelectElement("/response/trade_time"); var dinpaysign1 = el.XPathSelectElement("/response/sign"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; if (is_success == "F") { Response.Write("获取失败"); Response.End(); } string merchant_code2 = Regex.Match(merchant_code1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no2 = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string order_no2 = Regex.Match(order_no1.ToString(), "(?<=>).*?(?=<)").Value; string merchant_sign_id2 = Regex.Match(merchant_sign_id1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status2 = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string trade_time2 = Regex.Match(trade_time1.ToString(), "(?<=>).*?(?=<)").Value; string dinpaysign = Regex.Match(dinpaysign1.ToString(), "(?<=>).*?(?=<)").Value; //组装验签字符串 string signsrc = "is_success=" + is_success + "&merchant_code=" + merchant_code2 + "&merchant_sign_id=" + merchant_sign_id2 + "&order_no=" + order_no2 + "&trade_no=" + trade_no2 + "&trade_status=" + trade_status2 + "&trade_time=" + trade_time2; //RSA验签 bool result = rsaWithH.VerifySign("800004007888", signsrc, dinpaysign); if (result == false) { Response.Write("验签失败"); Response.End(); } Response.Write("结果:" + signsrc + "<br/>"); Response.Write("验签结果:" + result + "<br/>"); //Response.End() } } finally { } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string interface_version = Request.Form["interface_version"].ToString().Trim(); string input_charset = Request.Form["input_charset"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string sms_type = Request.Form["sms_type"].ToString().Trim(); string send_type = Request.Form["send_type"].ToString().Trim(); string merchant_sign_id = Request.Form["merchant_sign_id"].ToString().Trim(); string card_type = Request.Form["card_type"].ToString().Trim(); string mobile = Request.Form["mobile"].ToString().Trim(); string bank_code = Request.Form["bank_code"].ToString().Trim(); string card_no = Request.Form["card_no"].ToString().Trim(); string card_name = Request.Form["card_name"].ToString().Trim(); string id_no = Request.Form["id_no"].ToString().Trim(); string card_cvv2 = Request.Form["card_cvv2"].ToString().Trim(); string card_exp_date = Request.Form["card_exp_date"].ToString().Trim(); string encrypt_info = card_no + "|" + card_name + "|" + id_no; //组装敏感数据 ////使用中鼎融公钥对卡号和卡密加密【中鼎融公钥需从商家后台-公钥管理中取出】////////// string encryption_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTE8YBexrEmn8oEqsASVgkZEUo/WTqKZlmr0MYDyIVgcNfvXJPUR9kD46RAT11UYKK681UI0IWcfi/uB+bL00bVzuW7x5YdT5zdDuca/i3H3MIbWMcAHXAqPQt38Z0yWoXoCJp0IZ975vBVSe/a70M7uh1aLSapQFKyUCO2i3hGwIDAQAB"; //////////将公钥转换成C#专用格式/////////// encryption_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(encryption_key); //加密后的卡号密码 string encrypt_info_result = testOrder.HttpHelp.RSAEncrypt(encrypt_info, encryption_key); ////////////////组装签名///////////////// string signStr = ""; if (bank_code != "") { signStr = signStr + "bank_code=" + bank_code; } if (card_type != "") { signStr = signStr + "&card_type=" + card_type; } if (bank_code != "") { signStr = signStr + "&encrypt_info=" + encrypt_info + "&"; } signStr = signStr + "input_charset=" + input_charset + "&interface_version=" + interface_version + "&merchant_code=" + merchant_code; if (merchant_sign_id != "") { signStr = signStr + "&merchant_sign_id=" + merchant_sign_id; } signStr = signStr + "&mobile=" + mobile + "&order_amount=" + order_amount + "&order_no=" + order_no + "&send_type=" + send_type + "&service_type=" + service_type + "&sms_type=" + sms_type; if (sign_type == "RSA-S")//RSA-S签名方法 { //商家私钥 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALIgluJzrKhOw/+sKlUZW+GFISjeXCqNz45rhEd4pRhg92ZDwyJxsIWVMUggCJLjSAke2wmVOiYJB/V9rNwlCzal5BGCSD0y8VckUb8LMv5wnNxr3wjrXf6IbZWsgNOwZg1mo+Cji5LCwoKvYvbZNK33Nb9MwbBh1PHUVP8AsfM3AgMBAAECgYEAr6oyAtse39Dlu+OWz9u1X/+BhyNa82Bs20Au8KkK77LY6NJUw0gpVGOgeUeWDP31kYELdDTlZpMrdS9eZLBnj/QofFTx7GSeod+vV13cgA6rc0yzjTp25Dm7Xzihf15R5JiNIFzlSYC2TLz+HcJoprxY6Pf6I/1qBjZuoC67eEECQQDjDhEI7s010aXXYQy3xwC/RUDosnfMARqRCpYFCYmoyMiUZ7+ohIvWkkCcwHx7VNKnXfmF0ezdXNT2TCKfXj6hAkEAyNXFKkCPtbg+GFqUlxlfta1s7FJuC1b8ZyaA1ygqUK5PJUoEKR9UcDg0uCKx4Zofpm46WCHx8w8M0+Abss8a1wJAA5JqFDDli44zxLKjJ5T63wdw4PhFyDDQQS3gdE3VG5GlDiifrEABjyuX1p90leAcvENPNJq71jOqqgFCni02YQJAQ8q09SA54lNA0qOwyJhOEFtsCxGAB9/i70a18uqh7f4IxUOIyADFVeQDF6zOcqK90EYg96Ltsuf/on1hnCgAnQJBANGvRflfL1Xvelv2jb446Gnq83IwQ6WJvO8z7/awfMmDsC88MI2bE0xcWJ2QPZZEVJkgCmwOXc26G+z0eei/z/U="; //私钥转换成C#专用私钥 merchant_private_key = testOrder.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrder.HttpHelp.RSASign(signStr, merchant_private_key); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //将加密后的卡号卡密进行UrlEncode编码 encrypt_info_result = HttpUtility.UrlEncode(encrypt_info_result); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到Dinpay网关 string _xml = testOrder.HttpHelp.HttpPost("https://api.yuanruic.com/gateway/api/express", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将XML中的参数逐个提取出来 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchant_code1 = el.XPathSelectElement("/response/merchant_code"); var order_no1 = el.XPathSelectElement("/response/order_no"); var sms_trade_no1 = el.XPathSelectElement("/response/sms_trade_no"); var dinpaysign1 = el.XPathSelectElement("/response/sign"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; if (is_success == "F") { Response.Write("获取失败"); Response.End(); } string merchant_code2 = Regex.Match(merchant_code1.ToString(), "(?<=>).*?(?=<)").Value; string order_no2 = Regex.Match(order_no1.ToString(), "(?<=>).*?(?=<)").Value; string sms_trade_no2 = Regex.Match(sms_trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string dinpaysign = Regex.Match(dinpaysign1.ToString(), "(?<=>).*?(?=<)").Value; //组装验签字符串 string signsrc = "is_success=" + is_success + "&merchant_code=" + merchant_code2 + "&order_no=" + order_no2 + "&sms_trade_no=" + sms_trade_no2; //使用中鼎融公钥对返回的数据验签 bool validateResult = testOrder.HttpHelp.ValidateRsaSign(signsrc, encryption_key, dinpaysign); if (validateResult == false) { Response.Write("验签失败"); Response.End(); } Response.Write("短信验证码流水号:" + sms_trade_no2 + "<br/>"); Response.Write("验签结果:" + validateResult + "<br/>"); //Response.End() } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/108008008666.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化(version路径需跟证书一致,证书会自动生成version) string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //将加密后的卡号卡密进行UrlEncode编码 encrypt_info_result = HttpUtility.UrlEncode(encrypt_info_result); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到Dinpay网关 string _xml = testOrder.HttpHelp.HttpPost("https://api.yuanruic.com/gateway/api/express", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将XML中的参数逐个提取出来 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchant_code1 = el.XPathSelectElement("/response/merchant_code"); var order_no1 = el.XPathSelectElement("/response/order_no"); var sms_trade_no1 = el.XPathSelectElement("/response/sms_trade_no"); var dinpaysign1 = el.XPathSelectElement("/response/sign"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; if (is_success == "F") { Response.Write("获取失败"); Response.End(); } string merchant_code2 = Regex.Match(merchant_code1.ToString(), "(?<=>).*?(?=<)").Value; string order_no2 = Regex.Match(order_no1.ToString(), "(?<=>).*?(?=<)").Value; string sms_trade_no2 = Regex.Match(sms_trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string dinpaysign = Regex.Match(dinpaysign1.ToString(), "(?<=>).*?(?=<)").Value; //组装验签字符串 string signsrc = "is_success=" + is_success + "&merchant_code=" + merchant_code2 + "&order_no=" + order_no2 + "&sms_trade_no=" + sms_trade_no2; //RSA验签 bool result = rsaWithH.VerifySign("108008008666", signsrc, dinpaysign); if (result == false) { Response.Write("验签失败"); Response.End(); } Response.Write("短信验证码流水号:" + sms_trade_no2 + "<br/>"); Response.Write("验签结果:" + result + "<br/>"); //Response.End() } } finally{ } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); ///////////////////////////// 数据签名 ///////////////////////////////// string signStr = "interface_version=" + interface_version + "&merchant_code=" + merchant_code + "&order_no=" + order_no + "&service_type=" + service_type; if (sign_type == "RSA-S") //RSA-S签名方法 { /** merchant_private_key,商户私钥,商户按照《密钥对获取工具说明》操作并获取商户私钥。获取商户私钥的同时,也要 * 获取商户公钥(merchant_public_key)并且将商户公钥上传到商家后台"公钥管理"(如何获取和上传请看《密钥对获取工具说明》), * 不上传商户公钥会导致调试的时候报错“签名错误”。 */ //demo提供的merchant_private_key是测试商户号800003004321的商户私钥,请自行获取商户私钥并且替换。 string merchant_private_key = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBANilQBp9xg6KdgB+6jVnIFnMl34jR3sGguvDjAgTLTqYd/FhkSbNl24rbRKDjZ4jqDKxFFUbFlqMd0YuSzhE+Utb1jNcBROTyIn/2O0cCmN0tPFaSgL/ywYhXSjT1FlAWuFbBV+bggj8CLDUpTGm31BofJA/qmg9Kn/wW2aF8QjNAgMBAAECgYEAyALgiNSfeqM4SELjxcPc6SrqngjCIIGlczbI3FegBR3odlBmatWaPZsYCuSrZVl0GsDDjcMBQz21jHSG+38qS0WTxWrMgw/k88ygbfDXWEZQd1v8Em7CDIFN5rZ7InS2GZsDDl5HhBHFKp6eoGug+Xo7Z5O8GokYaGKCdOuVcUECQQD9NRF05NTp0BzGxfVkcWmJeYI23vH+No8nPed4OZSA2gNtpz7mZ2NE7lw05skznf4bVxWTanlynorYD32fejfdAkEA2wjzKggsxfiy4FkPpq9Q04FooQt+W8efD4EOWuYMOVNoOAJYmjzE8YY2XUkaEZ80NHnCJcEZ/UtSX4OqL/f9sQJBANcazTCr8cCL/tZSd8yTmF+krR1mOtiGiwiAS3LUH7dy/jSaPxJHRIrbn9OFN+o0zxl02qx4aKIZ08QHLOZdUrUCQQDagA4a8va/Mv42QYIUdLV7mI+of8+4fOWW0NZiJTUyhprjrKt4iYCps4pN+tuvkpLAemoLwZtMi7QLpkvC+G+xAkAtOkom2PugToM5QiM4MS7puinFV89SEsVQuGvHyyJ/iH8O6igd5XrH1AR7kL879onPTvARTz+Ai7bHq3mUD3Wr"; //私钥转换成C#专用私钥 merchant_private_key = testOrderQuery.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrderQuery.HttpHelp.RSASign(signStr, merchant_private_key); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.httppost("https://query.yuanruic.com/query", para, "UTF-8"); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchantcode1 = el.XPathSelectElement("/response/trade/merchant_code"); var orderno1 = el.XPathSelectElement("/response/trade/order_no"); var ordertime1 = el.XPathSelectElement("/response/trade/order_time"); var orderamount1 = el.XPathSelectElement("/response/trade/order_amount"); var trade_no1 = el.XPathSelectElement("/response/trade/trade_no"); var trade_time1 = el.XPathSelectElement("/response/trade/trade_time"); var zhfsign1 = el.XPathSelectElement("/response/sign"); var trade_status1 = el.XPathSelectElement("/response/trade/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string trade_time = Regex.Match(trade_time1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string zhfsign = Regex.Match(zhfsign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&trade_no=" + trade_no + "&trade_status=" + trade_status + "&trade_time=" + trade_time; /** * 1)zhf_public_key,公钥,每个商家对应一个固定的公钥(不是使用工具生成的密钥merchant_public_key,不要混淆), * 即为商家后台"公钥管理"->"公钥"里的绿色字符串内容 * 2)demo提供的zhf_public_key是测试商户号800003004321的公钥,请自行复制对应商户号的公钥进行调整和替换。 */ string zhf_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLYAY1pTXcMwKKagEgKxv0Wtq0EwcKxQdQ6X+duKWWY1ti+YMSKx5RwUNPSqm9u59GkbFCHScOw+pZvHnDl47uaOV0NcxJU9CuGQ4UkuN5zJS/g/Fi4IFtQpLJPM5pJGNvnBkJzfqAD8DGOPoAc0TypMq2/HEVRMWU6PYBIiFa+QIDAQAB"; //将公钥转换成C#专用格式 zhf_public_key = testOrderQuery.HttpHelp.RSAPublicKeyJava2DotNet(zhf_public_key); //验签 bool validateResult = testOrderQuery.HttpHelp.ValidateRsaSign(signsrc, zhf_public_key, zhfsign); if (validateResult == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/800003004321.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.httppost("https://query.yuanruic.com/query", para, "UTF-8"); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchantcode1 = el.XPathSelectElement("/response/trade/merchant_code"); var orderno1 = el.XPathSelectElement("/response/trade/order_no"); var ordertime1 = el.XPathSelectElement("/response/trade/order_time"); var orderamount1 = el.XPathSelectElement("/response/trade/order_amount"); var trade_no1 = el.XPathSelectElement("/response/trade/trade_no"); var trade_time1 = el.XPathSelectElement("/response/trade/trade_time"); var zhfsign1 = el.XPathSelectElement("/response/sign"); var trade_status1 = el.XPathSelectElement("/response/trade/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string trade_time = Regex.Match(trade_time1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string zhfsign = Regex.Match(zhfsign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&trade_no=" + trade_no + "&trade_status=" + trade_status + "&trade_time=" + trade_time; bool result = rsaWithH.VerifySign("800003004321", signsrc, zhfsign); if (result == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } } finally { } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string interface_version = Request.Form["interface_version"].ToString().Trim(); string input_charset = Request.Form["input_charset"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string sms_type = Request.Form["sms_type"].ToString().Trim(); string send_type = Request.Form["send_type"].ToString().Trim(); string merchant_sign_id = Request.Form["merchant_sign_id"].ToString().Trim(); string card_type = Request.Form["card_type"].ToString().Trim(); string mobile = Request.Form["mobile"].ToString().Trim(); string bank_code = Request.Form["bank_code"].ToString().Trim(); string card_no = Request.Form["card_no"].ToString().Trim(); string card_name = Request.Form["card_name"].ToString().Trim(); string id_no = Request.Form["id_no"].ToString().Trim(); string card_cvv2 = Request.Form["card_cvv2"].ToString().Trim(); string card_exp_date = Request.Form["card_exp_date"].ToString().Trim(); string encrypt_info = card_no + "|" + card_name + "|" + id_no; //组装敏感数据 ////使用公钥对卡号和卡密加密【公钥需从商家后台-公钥管理中取出】////////// string encryption_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCblMocFL3j45rvS03WwoIQGCUNzaQoClC6uoKq62eXoSrAmYTZKZELphGU6daTFZrWfIj7/6bCL+f00EshMsP6OMNOw4f5I/R/DVnfTiWicckl1Qi8gPCIXpxvY1e90rRvQT2HfpZUStTifdAUmxm9V8cACTlCFiEo9TgDCmOBFwIDAQAB"; //////////将公钥转换成C#专用格式/////////// encryption_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(encryption_key); //加密后的卡号密码 string encrypt_info_result = testOrder.HttpHelp.RSAEncrypt(encrypt_info, encryption_key); ////////////////组装签名///////////////// string signStr = ""; if (bank_code != "") { signStr = signStr + "bank_code=" + bank_code; } if (card_type != "") { signStr = signStr + "&card_type=" + card_type; } if (bank_code != "") { signStr = signStr + "&encrypt_info=" + encrypt_info + "&"; } signStr = signStr + "input_charset=" + input_charset + "&interface_version=" + interface_version + "&merchant_code=" + merchant_code; if (merchant_sign_id != "") { signStr = signStr + "&merchant_sign_id=" + merchant_sign_id; } signStr = signStr + "&mobile=" + mobile + "&order_amount=" + order_amount + "&order_no=" + order_no + "&send_type=" + send_type + "&service_type=" + service_type + "&sms_type=" + sms_type; if (sign_type == "RSA-S")//RSA-S签名方法 { //商家私钥 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALf/+xHa1fDTCsLYPJLHy80aWq3djuV1T34sEsjp7UpLmV9zmOVMYXsoFNKQIcEzei4QdaqnVknzmIl7n1oXmAgHaSUF3qHjCttscDZcTWyrbXKSNr8arHv8hGJrfNB/Ea/+oSTIY7H5cAtWg6VmoPCHvqjafW8/UP60PdqYewrtAgMBAAECgYEAofXhsyK0RKoPg9jA4NabLuuuu/IU8ScklMQIuO8oHsiStXFUOSnVeImcYofaHmzIdDmqyU9IZgnUz9eQOcYg3BotUdUPcGgoqAqDVtmftqjmldP6F6urFpXBazqBrrfJVIgLyNw4PGK6/EmdQxBEtqqgXppRv/ZVZzZPkwObEuECQQDenAam9eAuJYveHtAthkusutsVG5E3gJiXhRhoAqiSQC9mXLTgaWV7zJyA5zYPMvh6IviX/7H+Bqp14lT9wctFAkEA05ljSYShWTCFThtJxJ2d8zq6xCjBgETAdhiH85O/VrdKpwITV/6psByUKp42IdqMJwOaBgnnct8iDK/TAJLniQJABdo+RodyVGRCUB2pRXkhZjInbl+iKr5jxKAIKzveqLGtTViknL3IoD+Z4b2yayXg6H0g4gYj7NTKCH1h1KYSrQJBALbgbcg/YbeU0NF1kibk1ns9+ebJFpvGT9SBVRZ2TjsjBNkcWR2HEp8LxB6lSEGwActCOJ8Zdjh4kpQGbcWkMYkCQAXBTFiyyImO+sfCccVuDSsWS+9jrc5KadHGIvhfoRjIj2VuUKzJ+mXbmXuXnOYmsAefjnMCI6gGtaqkzl527tw="; //私钥转换成C#专用私钥 merchant_private_key = testOrder.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrder.HttpHelp.RSASign(signStr, merchant_private_key); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //将加密后的卡号卡密进行UrlEncode编码 encrypt_info_result = HttpUtility.UrlEncode(encrypt_info_result); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到Dinpay网关 string _xml = testOrder.HttpHelp.HttpPost("https://api.yuanruic.com/gateway/api/express", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将XML中的参数逐个提取出来 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchant_code1 = el.XPathSelectElement("/response/merchant_code"); var order_no1 = el.XPathSelectElement("/response/order_no"); var sms_trade_no1 = el.XPathSelectElement("/response/sms_trade_no"); var dinpaysign1 = el.XPathSelectElement("/response/sign"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; if (is_success == "F") { Response.Write("获取失败"); Response.End(); } string merchant_code2 = Regex.Match(merchant_code1.ToString(), "(?<=>).*?(?=<)").Value; string order_no2 = Regex.Match(order_no1.ToString(), "(?<=>).*?(?=<)").Value; string sms_trade_no2 = Regex.Match(sms_trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string dinpaysign = Regex.Match(dinpaysign1.ToString(), "(?<=>).*?(?=<)").Value; //组装验签字符串 string signsrc = "is_success=" + is_success + "&merchant_code=" + merchant_code2 + "&order_no=" + order_no2 + "&sms_trade_no=" + sms_trade_no2; //使用中鼎融公钥对返回的数据验签 bool validateResult = testOrder.HttpHelp.ValidateRsaSign(signsrc, encryption_key, dinpaysign); if (validateResult == false) { Response.Write("验签失败"); Response.End(); } Response.Write("短信验证码流水号:" + sms_trade_no2 + "<br/>"); Response.Write("验签结果:" + validateResult + "<br/>"); //Response.End() } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/200001001888.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化(version路径需跟证书一致,证书会自动生成version) string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //将加密后的卡号卡密进行UrlEncode编码 encrypt_info_result = HttpUtility.UrlEncode(encrypt_info_result); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到Dinpay网关 string _xml = testOrder.HttpHelp.HttpPost("https://api.yuanruic.com/gateway/api/express", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将XML中的参数逐个提取出来 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchant_code1 = el.XPathSelectElement("/response/merchant_code"); var order_no1 = el.XPathSelectElement("/response/order_no"); var sms_trade_no1 = el.XPathSelectElement("/response/sms_trade_no"); var dinpaysign1 = el.XPathSelectElement("/response/sign"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; if (is_success == "F") { Response.Write("获取失败"); Response.End(); } string merchant_code2 = Regex.Match(merchant_code1.ToString(), "(?<=>).*?(?=<)").Value; string order_no2 = Regex.Match(order_no1.ToString(), "(?<=>).*?(?=<)").Value; string sms_trade_no2 = Regex.Match(sms_trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string dinpaysign = Regex.Match(dinpaysign1.ToString(), "(?<=>).*?(?=<)").Value; //组装验签字符串 string signsrc = "is_success=" + is_success + "&merchant_code=" + merchant_code2 + "&order_no=" + order_no2 + "&sms_trade_no=" + sms_trade_no2; //RSA验签 bool result = rsaWithH.VerifySign("200001001888", signsrc, dinpaysign); if (result == false) { Response.Write("验签失败"); Response.End(); } Response.Write("短信验证码流水号:" + sms_trade_no2 + "<br/>"); Response.Write("验签结果:" + result + "<br/>"); //Response.End() } } finally{ } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); ///////////////////////////// 数据签名 ///////////////////////////////// string signStr = "interface_version=" + interface_version + "&merchant_code=" + merchant_code + "&order_no=" + order_no + "&service_type=" + service_type; if (sign_type == "RSA-S") //RSA-S签名方法 { /** merchant_private_key,商户私钥,商户按照《密钥对获取工具说明》操作并获取商户私钥。获取商户私钥的同时,也要 * 获取商户公钥(merchant_public_key)并且将商户公钥上传到商家后台"公钥管理"(如何获取和上传请看《密钥对获取工具说明》), * 不上传商户公钥会导致调试的时候报错“签名错误”。 */ //demo提供的merchant_private_key是测试商户号100100200200的商户私钥,请自行获取商户私钥并且替换。 string merchant_private_key = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOlji/yfZS3DKefgXJandiPPlheoJeOPgiqdy7WO5kYDxpYIbcmJXp1sIxC0MqY5pyWIOyBlW/NHWDfRyTIYvFm6vxx9m/TeTYKRXHPNdCefXNeV5XoCB7s7gJoeqR1qwgBE0a2Sw4slMrKL4LSv0J0o3po9SgYhP06m3az9dZzDAgMBAAECgYEAgLGdvX1/Y06cyvnS1FgfMvwCvaTAz8yQcEN20vSrUaw/Uvfu4hTXkWLRqyJSU4qy+mU2hVSe8XVD1fPeR7uQD7TWqmXCaIC12DqWFvA2Eio/x4nIixj5t4PN4lbUVBHH/OnHypRWFNcQemR4OWcYCWi5/cYshEaOk9XQnUQKvcECQQD7ZBDA+d8IXM7jtlNNEp+ySw87iz8pKhBoVt3XrAkGczuM9A+ZY+ReViHVxuxqd5AgxSPj1hoQeFR0BnPEVKgzAkEA7ar8kvzp9sPMDujN9QSr+yq73CTlRr8W5q0vMCxsJagie6znvtsAzka3EkI0Srix5fHjRWrWWknblDat5CnpMQJAGfYLhOJJFiP/eaSqlZsGwvLdb9jBfQ7LAvt1jYBGrlPYIoZR1hVq0BM1C06vu479Y2T4f97scib7EcBY1D2p4QJALvdmOEngllI1BhE9ehj1P4o/W46y/FsQ1H8O3y84I+zo+5W8qjuvGhRhYytQGCANj8pQRkyJlYgY614u2PLrUQJAAv9neGYMeFdZnanlsdg6EepWAzvT2tv45WF74BQKJzZF+IFtE1XD85QcqkOJ3o8WgVwXK6/BCn5vNahImz+Ohg=="; //私钥转换成C#专用私钥 merchant_private_key = testOrderQuery.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrderQuery.HttpHelp.RSASign(signStr, merchant_private_key); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.httppost("https://query.suifupay.com/query", para, "UTF-8"); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchantcode1 = el.XPathSelectElement("/response/trade/merchant_code"); var orderno1 = el.XPathSelectElement("/response/trade/order_no"); var ordertime1 = el.XPathSelectElement("/response/trade/order_time"); var orderamount1 = el.XPathSelectElement("/response/trade/order_amount"); var trade_no1 = el.XPathSelectElement("/response/trade/trade_no"); var trade_time1 = el.XPathSelectElement("/response/trade/trade_time"); var zhfsign1 = el.XPathSelectElement("/response/sign"); var trade_status1 = el.XPathSelectElement("/response/trade/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string trade_time = Regex.Match(trade_time1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string zhfsign = Regex.Match(zhfsign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&trade_no=" + trade_no + "&trade_status=" + trade_status + "&trade_time=" + trade_time; /** * 1)zhf_public_key,公钥,每个商家对应一个固定的公钥(不是使用工具生成的密钥merchant_public_key,不要混淆), * 即为商家后台"公钥管理"->"公钥"里的绿色字符串内容 * 2)demo提供的zhf_public_key是测试商户号100100101102的公钥,请自行复制对应商户号的公钥进行调整和替换。 */ string zhf_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCP2DxiRIhY5JCpeQDQO9oJJ5iyZ/HviNzTY23N6XEp+P4tacdftFsgwh1DoR4Qa8MI5Lrmb2WTBlFsybLqM9LYLeBvODokFdAdoi+VOjkESJ4Y8XygiP4Sz7osOwB3MkvLVHAK8e2O8U09Sj2MI034snHvnhCpU3ye3BqkzetLkQIDAQAB"; //将公钥转换成C#专用格式 zhf_public_key = testOrderQuery.HttpHelp.RSAPublicKeyJava2DotNet(zhf_public_key); //验签 bool validateResult = testOrderQuery.HttpHelp.ValidateRsaSign(signsrc, zhf_public_key, zhfsign); if (validateResult == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/100100101102.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.httppost("https://query.suifupay.com/query", para, "UTF-8"); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchantcode1 = el.XPathSelectElement("/response/trade/merchant_code"); var orderno1 = el.XPathSelectElement("/response/trade/order_no"); var ordertime1 = el.XPathSelectElement("/response/trade/order_time"); var orderamount1 = el.XPathSelectElement("/response/trade/order_amount"); var trade_no1 = el.XPathSelectElement("/response/trade/trade_no"); var trade_time1 = el.XPathSelectElement("/response/trade/trade_time"); var zhfsign1 = el.XPathSelectElement("/response/sign"); var trade_status1 = el.XPathSelectElement("/response/trade/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string trade_time = Regex.Match(trade_time1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string zhfsign = Regex.Match(zhfsign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&trade_no=" + trade_no + "&trade_status=" + trade_status + "&trade_time=" + trade_time; bool result = rsaWithH.VerifySign("100100200200", signsrc, zhfsign); if (result == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } } finally { } }
protected void Page_Load(object sender, EventArgs e) { //获取反馈信息 string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string notify_type = Request.Form["notify_type"].ToString().Trim(); string notify_id = Request.Form["notify_id"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string zhfsign = Request.Form["sign"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string extra_return_param = Request.Form["extra_return_param"]; string trade_no = Request.Form["trade_no"].ToString().Trim(); string orginal_money = Request.Form["orginal_money"]; string trade_time = Request.Form["trade_time"].ToString().Trim(); string trade_status = Request.Form["trade_status"].ToString().Trim(); string bank_seq_no = Request.Form["bank_seq_no"]; /** *签名顺序按照参数名a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推, *参数名1=参数值1&参数名2=参数值2&……&参数名n=参数值n **/ //组织订单信息 string signStr = ""; if (null != bank_seq_no && bank_seq_no != "") { signStr = signStr + "bank_seq_no=" + bank_seq_no.ToString().Trim() + "&"; } if (null != extra_return_param && extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } signStr = signStr + "interface_version=" + interface_version + "&"; signStr = signStr + "merchant_code=" + merchant_code + "&"; if (null != notify_id && notify_id != "") { signStr = signStr + "notify_id=" + notify_id + "¬ify_type=" + notify_type + "&"; } signStr = signStr + "order_amount=" + order_amount + "&"; signStr = signStr + "order_no=" + order_no + "&"; signStr = signStr + "order_time=" + order_time + "&"; if (null != orginal_money && orginal_money != "") { signStr = signStr + "orginal_money=" + orginal_money + "&"; } signStr = signStr + "trade_no=" + trade_no + "&"; signStr = signStr + "trade_status=" + trade_status + "&"; if (null != trade_time && trade_time != "") { signStr = signStr + "trade_time=" + trade_time; } if (sign_type == "RSA-S") //RSA-S的验签方法 { /** * 1)zhf_public_key,公钥,每个商家对应一个固定的公钥(不是使用工具生成的密钥merchant_public_key,不要混淆), * 即为商家后台"公钥管理"->"公钥"里的绿色字符串内容 * 2)demo提供的zhf_public_key是测试商户号1111110166的公钥,请自行复制对应商户号的公钥进行调整和替换。 */ string zhf_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWOq5aHSTvdxGPDKZWSl6wrPpnMHW+8lOgVU71jB2vFGuA6dwa/RpJKnz9zmoGryZlgUmfHANnN0uztkgwb+5mpgmegBbNLuGqqHBpQHo2EsiAhgvgO3VRmWC8DARpzNxknsJTBhkUvZdy4GyrjnUrvsARg4VrFzKDWL0Yu3gunQIDAQAB"; //将公钥转换成C#专用格式 zhf_public_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(zhf_public_key); //验签 bool result = testOrder.HttpHelp.ValidateRsaSign(signStr, zhf_public_key, zhfsign); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后必须打印SUCCESS来响应服务器以示商户已经正常收到服务器发送的异步数据通知,否则服务器将会在之后的时间内若干次发送同一笔订单的异步数据!! Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } else //RSA验签方法 { string merPubKeyDir = "D:/1111110166.pfx"; string password = "******"; RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); bool result = rsaWithH.VerifySign("1111110166", signStr, zhfsign); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后必须打印SUCCESS来响应服务器以示商户已经正常收到服务器发送的异步数据通知,否则服务器将会在之后的时间内若干次发送同一笔订单的异步数据!! Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string interface_version1 = Request.Form["interface_version"].ToString().Trim(); string input_charset1 = Request.Form["input_charset"].ToString().Trim(); string service_type1 = Request.Form["service_type"].ToString().Trim(); string sign_type1 = Request.Form["sign_type"].ToString().Trim(); string merchant_code1 = Request.Form["merchant_code"].ToString().Trim(); string order_no1 = Request.Form["order_no"].ToString().Trim(); string order_amount1 = Request.Form["order_amount"].ToString().Trim(); string order_time1 = Request.Form["order_time"].ToString().Trim(); string notify_url1 = Request.Form["notify_url"].ToString().Trim(); string card_type1 = Request.Form["card_type"].ToString().Trim(); string mobile1 = Request.Form["mobile"].ToString().Trim(); string bank_code1 = Request.Form["bank_code"].ToString().Trim(); string product_name1 = Request.Form["product_name"].ToString().Trim(); string product_code1 = Request.Form["product_code"].ToString().Trim(); string product_num1 = Request.Form["product_num"].ToString().Trim(); string product_desc1 = Request.Form["product_desc"].ToString().Trim(); string card_no = Request.Form["card_no"].ToString().Trim(); string card_name = Request.Form["card_name"].ToString().Trim(); string id_no = Request.Form["id_no"].ToString().Trim(); string card_cvv2 = Request.Form["card_cvv2"].ToString().Trim(); string card_exp_date = Request.Form["card_exp_date"].ToString().Trim(); string encrypt_info1 = card_no + "|" + card_name + "|" + id_no; //组装敏感数据 ////使用公钥对卡号和卡密加密【公钥需从商家后台-公钥管理中取出】////////// string encryption_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCblMocFL3j45rvS03WwoIQGCUNzaQoClC6uoKq62eXoSrAmYTZKZELphGU6daTFZrWfIj7/6bCL+f00EshMsP6OMNOw4f5I/R/DVnfTiWicckl1Qi8gPCIXpxvY1e90rRvQT2HfpZUStTifdAUmxm9V8cACTlCFiEo9TgDCmOBFwIDAQAB"; //////////将公钥转换成C#专用格式/////////// encryption_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(encryption_key); //加密后的卡号密码 string encrypt_info2 = testOrder.HttpHelp.RSAEncrypt(encrypt_info1, encryption_key); ////////////////组装签名///////////////// string signStr = "bank_code=" + bank_code1 + "&card_type=" + card_type1 + "&encrypt_info=" + encrypt_info2 + "&input_charset=" + input_charset1 + "&interface_version=" + interface_version1 + "&merchant_code=" + merchant_code1 + "&mobile=" + mobile1 + "¬ify_url=" + notify_url1 + "&order_amount=" + order_amount1 + "&order_no=" + order_no1 + "&order_time=" + order_time1 + "&product_name=" + product_name1 + "&service_type=" + service_type1; if (sign_type1 == "RSA-S")//RSA-S签名方法 { //商家私钥 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALf/+xHa1fDTCsLYPJLHy80aWq3djuV1T34sEsjp7UpLmV9zmOVMYXsoFNKQIcEzei4QdaqnVknzmIl7n1oXmAgHaSUF3qHjCttscDZcTWyrbXKSNr8arHv8hGJrfNB/Ea/+oSTIY7H5cAtWg6VmoPCHvqjafW8/UP60PdqYewrtAgMBAAECgYEAofXhsyK0RKoPg9jA4NabLuuuu/IU8ScklMQIuO8oHsiStXFUOSnVeImcYofaHmzIdDmqyU9IZgnUz9eQOcYg3BotUdUPcGgoqAqDVtmftqjmldP6F6urFpXBazqBrrfJVIgLyNw4PGK6/EmdQxBEtqqgXppRv/ZVZzZPkwObEuECQQDenAam9eAuJYveHtAthkusutsVG5E3gJiXhRhoAqiSQC9mXLTgaWV7zJyA5zYPMvh6IviX/7H+Bqp14lT9wctFAkEA05ljSYShWTCFThtJxJ2d8zq6xCjBgETAdhiH85O/VrdKpwITV/6psByUKp42IdqMJwOaBgnnct8iDK/TAJLniQJABdo+RodyVGRCUB2pRXkhZjInbl+iKr5jxKAIKzveqLGtTViknL3IoD+Z4b2yayXg6H0g4gYj7NTKCH1h1KYSrQJBALbgbcg/YbeU0NF1kibk1ns9+ebJFpvGT9SBVRZ2TjsjBNkcWR2HEp8LxB6lSEGwActCOJ8Zdjh4kpQGbcWkMYkCQAXBTFiyyImO+sfCccVuDSsWS+9jrc5KadHGIvhfoRjIj2VuUKzJ+mXbmXuXnOYmsAefjnMCI6gGtaqkzl527tw="; //私钥转换成C#专用私钥 merchant_private_key = testOrder.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrder.HttpHelp.RSASign(signStr, merchant_private_key); sign.Value = signData; } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/200001001888.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化 string signData = rsaWithH.Sign(signStr); //签名 sign.Value = signData; } interface_version.Value = interface_version1; input_charset.Value = input_charset1; service_type.Value = service_type1; sign_type.Value = sign_type1; merchant_code.Value = merchant_code1; order_no.Value = order_no1; order_amount.Value = order_amount1; order_time.Value = order_time1; notify_url.Value = notify_url1; card_type.Value = card_type1; mobile.Value = mobile1; bank_code.Value = bank_code1; product_name.Value = product_name1; encrypt_info.Value = encrypt_info2; } finally { } }
protected void Page_Load(object sender, EventArgs e) { //获取反馈信息 string merchant_code = Request.Form["merchant_code"]; string notify_type = Request.Form["notify_type"]; string notify_id = Request.Form["notify_id"].ToString().Trim(); string interface_version = Request.Form["interface_version"]; string sign_type = Request.Form["sign_type"]; string zhihfsign = Request.Form["sign"]; string order_no = Request.Form["order_no"]; string order_time = Request.Form["order_time"]; string order_amount = Request.Form["order_amount"]; string extra_return_param = Request.Form["extra_return_param"]; string trade_no = Request.Form["trade_no"]; string trade_time = Request.Form["trade_time"]; string trade_status = Request.Form["trade_status"]; string bank_seq_no = Request.Form["bank_seq_no"]; /** *签名顺序按照参数名a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推, *参数名1=参数值1&参数名2=参数值2&……&参数名n=参数值n **/ //组织订单信息 string signStr = ""; if (bank_seq_no != "") { signStr = signStr + "bank_seq_no=" + bank_seq_no + "&"; } if (extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } if (interface_version != "") { signStr = signStr + "interface_version=" + interface_version + "&"; } if (merchant_code != "") { signStr = signStr + "merchant_code=" + merchant_code + "&"; } if (notify_id != "") { signStr = signStr + "notify_id=" + notify_id + "&"; } if (notify_type != "") { signStr = signStr + "notify_type=" + notify_type + "&"; } if (order_amount != "") { signStr = signStr + "order_amount=" + order_amount + "&"; } if (order_no != "") { signStr = signStr + "order_no=" + order_no + "&"; } if (order_time != "") { signStr = signStr + "order_time=" + order_time + "&"; } if (trade_no != "") { signStr = signStr + "trade_no=" + trade_no + "&"; } if (trade_status != "") { signStr = signStr + "trade_status=" + trade_status + "&"; } if (trade_time != "") { signStr = signStr + "trade_time=" + trade_time; } if (sign_type == "RSA-S") //RSA-S的验签方法 { //使用公钥对返回的数据验签 string zhihf_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZDirdU1syeYUoKJqt2QoxDHiWE4WNoewR0DBWlqMtQRC0GK9+v9QGG+WDTcIRiJr5tVusJo4hK/B5YYWlJs7ubrMSqFs7dWPrfplPYZUmR6J667c46tR6aDuD3vmoPviUXrIgrJRxgYCfl5wETvL8FIH2datclMtJuSba9+73nwIDAQAB"; //将公钥转换成C#专用格式 zhihf_public_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(zhihf_public_key); //验签 bool result = testOrder.HttpHelp.ValidateRsaSign(signStr, zhihf_public_key, zhihfsign); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后打印SUCCESS Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } else //RSA验签方法 { string merPubKeyDir = "D:/Z800001001001.pfx"; string password = "******"; RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); bool result = rsaWithH.VerifySign("Z800001001001", signStr, zhihfsign); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后必须打印SUCCESS来响应服务器以示商户已经正常收到服务器发送的异步数据通知,否则服务器将会在之后的时间内若干次发送同一笔订单的异步数据!! Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数//////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string interface_version = Request.Form["interface_version"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string product_name = Request.Form["product_name"].ToString().Trim(); string product_code = Request.Form["product_code"].ToString().Trim(); string product_num = Request.Form["product_num"].ToString().Trim(); string product_desc = Request.Form["product_desc"].ToString().Trim(); string extra_return_param = Request.Form["extra_return_param"].ToString().Trim(); string extend_param = Request.Form["extend_param"].ToString().Trim(); string notify_url = Request.Form["notify_url"].ToString().Trim(); string client_ip = Request.Form["client_ip"].ToString().Trim(); ////////////////组装签名参数////////////////// string signStr = ""; if (client_ip != "") { signStr = signStr + "client_ip=" + client_ip + "&"; } if (extend_param != "") { signStr = signStr + "extend_param=" + extend_param + "&"; } if (extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } if (interface_version != "") { signStr = signStr + "interface_version=" + interface_version + "&"; } if (merchant_code != "") { signStr = signStr + "merchant_code=" + merchant_code + "&"; } if (notify_url != "") { signStr = signStr + "notify_url=" + notify_url + "&"; } if (order_amount != "") { signStr = signStr + "order_amount=" + order_amount + "&"; } if (order_no != "") { signStr = signStr + "order_no=" + order_no + "&"; } if (order_time != "") { signStr = signStr + "order_time=" + order_time + "&"; } if (product_code != "") { signStr = signStr + "product_code=" + product_code + "&"; } if (product_desc != "") { signStr = signStr + "product_desc=" + product_desc + "&"; } if (product_name != "") { signStr = signStr + "product_name=" + product_name + "&"; } if (product_num != "") { signStr = signStr + "product_num=" + product_num + "&"; } if (service_type != "") { signStr = signStr + "service_type=" + service_type; } if (sign_type == "RSA-S")//RSA-S签名方法 { //商家私钥 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKn93SEpidIRKTYRqvjb6qW6iS8eorY/5nPwBE2xk7tdulDsWCZzLtt9oSCDZj6QTFXjXQZKO03cyvVPS5gZ1MIeW0ARkfcwdrJ6EawonKS909lIflCfCKCC9oCqHIhFXFmK9AU6UjcTwE5nwwb3K689Ng+6SEVjHMendtV3OTjDAgMBAAECgYBxx+QtADqpiqcE88p2i+yBRVvxWBYc2qSL0Ylv3348mT3OUIOoKMyiSXKB6rGTCs6tZmOrhCAxu6l1jL/SbOfEd33TSUmMSTAyLhq3Uc1kRa9D8u7hJHqHRJeG5NNU/rJy5t9ncBI9ktEKpWKQpix1WfqSsfeO+TKUfMNWOlDmIQJBANEqg7UrJ68n2rFpN281HDsVR12IQnBKyFtDqBZ33bWXR+yAXRexwLUvPZYaBuBEp9KcIBee9g0J6IY8W84Z5GsCQQDQDdsHOhAd01KhANnGz7FkIbac9vEohbovzlMeOPV7wXbsZR+ZrqJXzhbuvU8sjCGDItf5KRCtT+rjIofGJNMJAkEAos1WinK2hqycma3tic9q08nyLCjcnY53eCGm+SX/GVJQlxIqY0DlX6EPbH+Bjpmhjloa2IfPt8JYi/L6+eZJVQJANCfVCXm/wopQQ3ZAIbu9H3noGm85Q0xKwWM6qO/kcjKsilRLWK5TmilazFx+tY8nc4VPmPF3ccr/+hKU8NIYaQJBAL+bKSa+9N3aR1OnCfBf7Tf5hvCVCR7gKoo5llOH3yo+pNLBDdI4TDDueSoK0UD8t1nodrgZMc/sbch+9zWswQA="; //私钥转换成C#专用私钥 merchant_private_key = testOrder.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrder.HttpHelp.RSASign(signStr, merchant_private_key); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到网关 string _xml = testOrder.HttpHelp.HttpPost("https://api.wordfod.com/gateway/api/h5apipay", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将QRcode从XML中提取出来 var payURL = el.XPathSelectElement("/response/payURL"); if (payURL == null) { Response.Write("状态:" + _xml + "<br/>"); Response.End(); } //去掉首尾的标签并转换成string string qrcode = Regex.Match(payURL.ToString(), "(?<=>).*?(?=<)").Value; //二维码链接 //将支付链接在手机浏览器上打开自动唤醒微信app //Response.Write("<script language='javascript'>window.open('" + qrcode + "');</script>"); } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/588001002211.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化(version路径需跟证书一致,证书会自动生成version) string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到网关 string _xml = testOrder.HttpHelp.HttpPost("https://api.wordfod.com/gateway/api/h5apipay", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将XML中的参数逐个提取出来 var qrcode1 = el.XPathSelectElement("/response/qrcode"); if (qrcode1 == null) { Response.Write("错误:" + _xml + "<br/>"); Response.End(); } //去掉首尾的标签并转换成string string qrcode = Regex.Match(qrcode1.ToString(), "(?<=>).*?(?=<)").Value; //二维码链接 //将支付链接生成二维码 My.Utility.QRCodeHandler qr = new My.Utility.QRCodeHandler(); string path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"/qrcode/"; //文件目录 string qrString = qrcode; //二维码字符串 string logoFilePath = path + "my.jpg"; //商家Logo路径 string filePath = path + "myCode.jpg"; //二维码文件名 qr.CreateQRCode(qrString, "Byte", 6, 6, "H", filePath, true, logoFilePath); //生成二维码 } } finally{ } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); ///////////////////////////// 数据签名 ///////////////////////////////// string signStr = "interface_version=" + interface_version + "&merchant_code=" + merchant_code + "&order_no=" + order_no + "&service_type=" + service_type; if (sign_type == "RSA-S") //RSA-S签名方法 { /** merchant_private_key,商户私钥,商户按照《密钥对获取工具说明》操作并获取商户私钥。获取商户私钥的同时,也要 * 获取商户公钥(merchant_public_key)并且将商户公钥上传到智通宝商家后台"公钥管理"(如何获取和上传请看《密钥对获取工具说明》), * 不上传商户公钥会导致调试的时候报错“签名错误”。 */ //demo提供的merchant_private_key是测试商户号123001002003的商户私钥,请自行获取商户私钥并且替换。 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALIgluJzrKhOw/+sKlUZW+GFISjeXCqNz45rhEd4pRhg92ZDwyJxsIWVMUggCJLjSAke2wmVOiYJB/V9rNwlCzal5BGCSD0y8VckUb8LMv5wnNxr3wjrXf6IbZWsgNOwZg1mo+Cji5LCwoKvYvbZNK33Nb9MwbBh1PHUVP8AsfM3AgMBAAECgYEAr6oyAtse39Dlu+OWz9u1X/+BhyNa82Bs20Au8KkK77LY6NJUw0gpVGOgeUeWDP31kYELdDTlZpMrdS9eZLBnj/QofFTx7GSeod+vV13cgA6rc0yzjTp25Dm7Xzihf15R5JiNIFzlSYC2TLz+HcJoprxY6Pf6I/1qBjZuoC67eEECQQDjDhEI7s010aXXYQy3xwC/RUDosnfMARqRCpYFCYmoyMiUZ7+ohIvWkkCcwHx7VNKnXfmF0ezdXNT2TCKfXj6hAkEAyNXFKkCPtbg+GFqUlxlfta1s7FJuC1b8ZyaA1ygqUK5PJUoEKR9UcDg0uCKx4Zofpm46WCHx8w8M0+Abss8a1wJAA5JqFDDli44zxLKjJ5T63wdw4PhFyDDQQS3gdE3VG5GlDiifrEABjyuX1p90leAcvENPNJq71jOqqgFCni02YQJAQ8q09SA54lNA0qOwyJhOEFtsCxGAB9/i70a18uqh7f4IxUOIyADFVeQDF6zOcqK90EYg96Ltsuf/on1hnCgAnQJBANGvRflfL1Xvelv2jb446Gnq83IwQ6WJvO8z7/awfMmDsC88MI2bE0xcWJ2QPZZEVJkgCmwOXc26G+z0eei/z/U="; //私钥转换成C#专用私钥 merchant_private_key = testOrderQuery.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrderQuery.HttpHelp.RSASign(signStr, merchant_private_key); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.httppost("https://query.ztbaopay.com/query", para, "UTF-8"); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchantcode1 = el.XPathSelectElement("/response/trade/merchant_code"); var orderno1 = el.XPathSelectElement("/response/trade/order_no"); var ordertime1 = el.XPathSelectElement("/response/trade/order_time"); var orderamount1 = el.XPathSelectElement("/response/trade/order_amount"); var trade_no1 = el.XPathSelectElement("/response/trade/trade_no"); var trade_time1 = el.XPathSelectElement("/response/trade/trade_time"); var zhfsign1 = el.XPathSelectElement("/response/sign"); var trade_status1 = el.XPathSelectElement("/response/trade/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string trade_time = Regex.Match(trade_time1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string zhfsign = Regex.Match(zhfsign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&trade_no=" + trade_no + "&trade_status=" + trade_status + "&trade_time=" + trade_time; /** * 1)zhf_public_key,智通宝公钥,每个商家对应一个固定的智通宝公钥(不是使用工具生成的密钥merchant_public_key,不要混淆), * 即为智通宝商家后台"公钥管理"->"智通宝公钥"里的绿色字符串内容 * 2)demo提供的zhf_public_key是测试商户号123001002003的智通宝公钥,请自行复制对应商户号的智通宝公钥进行调整和替换。 */ string zhf_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9R4Md8mcLZoSMQUuDLD7f1Rau7x+yfAsvmzPWyc98uI/ZwBbVuS3lGZk+YXy1Kwk+UywDr8vy3o3siymxW8XBzYFYR6CNWl6CEwfa1PwwoyefGH+7P/SVz9XZ+wJR/3fQ8JurscZmVQHrYUOqcCMUPyohzN2FTCz8oWbF3uQ1NwIDAQAB"; //将智通宝公钥转换成C#专用格式 zhf_public_key = testOrderQuery.HttpHelp.RSAPublicKeyJava2DotNet(zhf_public_key); //验签 bool validateResult = testOrderQuery.HttpHelp.ValidateRsaSign(signsrc, zhf_public_key, zhfsign); if (validateResult == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/123001002003.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.httppost("https://query.ztbaopay.com/query", para, "UTF-8"); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchantcode1 = el.XPathSelectElement("/response/trade/merchant_code"); var orderno1 = el.XPathSelectElement("/response/trade/order_no"); var ordertime1 = el.XPathSelectElement("/response/trade/order_time"); var orderamount1 = el.XPathSelectElement("/response/trade/order_amount"); var trade_no1 = el.XPathSelectElement("/response/trade/trade_no"); var trade_time1 = el.XPathSelectElement("/response/trade/trade_time"); var zhfsign1 = el.XPathSelectElement("/response/sign"); var trade_status1 = el.XPathSelectElement("/response/trade/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string trade_time = Regex.Match(trade_time1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string zhfsign = Regex.Match(zhfsign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&trade_no=" + trade_no + "&trade_status=" + trade_status + "&trade_time=" + trade_time; bool result = rsaWithH.VerifySign("123001002003", signsrc, zhfsign); if (result == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } } finally { } }
protected void Page_Load(object sender, EventArgs e) { //获取反馈信息 string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string notify_type = Request.Form["notify_type"].ToString().Trim(); string notify_id = Request.Form["notify_id"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string zhfsign = Request.Form["sign"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string extra_return_param = Request.Form["extra_return_param"]; string trade_no = Request.Form["trade_no"].ToString().Trim(); string trade_time = Request.Form["trade_time"].ToString().Trim(); string trade_status = Request.Form["trade_status"].ToString().Trim(); string bank_seq_no = Request.Form["bank_seq_no"]; /** *签名顺序按照参数名a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推, *参数名1=参数值1&参数名2=参数值2&……&参数名n=参数值n&key=key值 **/ //组织订单信息 string signStr = ""; if (null != bank_seq_no && bank_seq_no != "") { signStr = signStr + "bank_seq_no=" + bank_seq_no.ToString().Trim() + "&"; } if (null != extra_return_param && extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } signStr = signStr + "interface_version=V3.0" + "&"; signStr = signStr + "merchant_code=" + merchant_code + "&"; if (null != notify_id && notify_id != "") { signStr = signStr + "notify_id=" + notify_id + "¬ify_type=" + notify_type + "&"; } signStr = signStr + "order_amount=" + order_amount + "&"; signStr = signStr + "order_no=" + order_no + "&"; signStr = signStr + "order_time=" + order_time + "&"; signStr = signStr + "trade_no=" + trade_no + "&"; signStr = signStr + "trade_status=" + trade_status + "&"; if (null != trade_time && trade_time != "") { signStr = signStr + "trade_time=" + trade_time; } if (sign_type == "RSA-S") //RSA-S的验签方法 { /** * 1)zhf_public_key,公钥,每个商家对应一个固定的公钥(不是使用工具生成的密钥merchant_public_key,不要混淆), * 即为商家后台"公钥管理"->"公钥"里的绿色字符串内容 * 2)demo提供的zhf_public_key是测试商户号123001002003的公钥,请自行复制对应商户号的公钥进行调整和替换。 */ string zhf_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9R4Md8mcLZoSMQUuDLD7f1Rau7x+yfAsvmzPWyc98uI/ZwBbVuS3lGZk+YXy1Kwk+UywDr8vy3o3siymxW8XBzYFYR6CNWl6CEwfa1PwwoyefGH+7P/SVz9XZ+wJR/3fQ8JurscZmVQHrYUOqcCMUPyohzN2FTCz8oWbF3uQ1NwIDAQAB"; //将公钥转换成C#专用格式 zhf_public_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(zhf_public_key); //验签 bool result = testOrder.HttpHelp.ValidateRsaSign(signStr, zhf_public_key, zhfsign); if (result == true) { //注:建议页面同步通知一般只做订单支付成功提示,而不做订单支付状态更新,更新订单支付状态在notify_url指定的地址处理,请做好订单是否重复修改状态的判断,以免虚拟充值重复到账!! Response.Write("验签成功"); } else { //验签失败 Response.Write("验签失败"); } } else //RSA验签方法 { string merPubKeyDir = "D:/123001002003.pfx"; string password = "******"; RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); bool result = rsaWithH.VerifySign("123001002003", signStr, zhfsign); if (result == true) { //注:建议页面同步通知一般只做订单支付成功提示,而不做订单支付状态更新,更新订单支付状态在notify_url指定的地址处理,请做好订单是否重复修改状态的判断,以免虚拟充值重复到账!! Response.Write("验签成功"); } else { //验签失败 Response.Write("验签失败"); } } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string interface_version = Request.Form["interface_version"].ToString().Trim(); string input_charset = Request.Form["input_charset"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string bank_code = Request.Form["bank_code"].ToString().Trim(); string card_type = Request.Form["card_type"].ToString().Trim(); string card_no = Request.Form["card_no"].ToString().Trim(); string mobile = Request.Form["mobile"].ToString().Trim(); string merchant_sign_id = Request.Form["merchant_sign_id"].ToString().Trim(); ////////////////组装签名///////////////// string signStr = ""; signStr = "bank_code=" + bank_code + "&card_no=" + card_no + "&card_type=" + card_type + "&input_charset=" + input_charset + "&interface_version=" + interface_version + "&merchant_code=" + merchant_code; if (merchant_sign_id != "") { signStr = signStr + "&merchant_sign_id=" + merchant_sign_id; } signStr = signStr + "&mobile=" + mobile + "&service_type=" + service_type; if (sign_type == "RSA-S")//RSA-S签名方法 { //商家私钥 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALIgluJzrKhOw/+sKlUZW+GFISjeXCqNz45rhEd4pRhg92ZDwyJxsIWVMUggCJLjSAke2wmVOiYJB/V9rNwlCzal5BGCSD0y8VckUb8LMv5wnNxr3wjrXf6IbZWsgNOwZg1mo+Cji5LCwoKvYvbZNK33Nb9MwbBh1PHUVP8AsfM3AgMBAAECgYEAr6oyAtse39Dlu+OWz9u1X/+BhyNa82Bs20Au8KkK77LY6NJUw0gpVGOgeUeWDP31kYELdDTlZpMrdS9eZLBnj/QofFTx7GSeod+vV13cgA6rc0yzjTp25Dm7Xzihf15R5JiNIFzlSYC2TLz+HcJoprxY6Pf6I/1qBjZuoC67eEECQQDjDhEI7s010aXXYQy3xwC/RUDosnfMARqRCpYFCYmoyMiUZ7+ohIvWkkCcwHx7VNKnXfmF0ezdXNT2TCKfXj6hAkEAyNXFKkCPtbg+GFqUlxlfta1s7FJuC1b8ZyaA1ygqUK5PJUoEKR9UcDg0uCKx4Zofpm46WCHx8w8M0+Abss8a1wJAA5JqFDDli44zxLKjJ5T63wdw4PhFyDDQQS3gdE3VG5GlDiifrEABjyuX1p90leAcvENPNJq71jOqqgFCni02YQJAQ8q09SA54lNA0qOwyJhOEFtsCxGAB9/i70a18uqh7f4IxUOIyADFVeQDF6zOcqK90EYg96Ltsuf/on1hnCgAnQJBANGvRflfL1Xvelv2jb446Gnq83IwQ6WJvO8z7/awfMmDsC88MI2bE0xcWJ2QPZZEVJkgCmwOXc26G+z0eei/z/U="; //私钥转换成C#专用私钥 merchant_private_key = testOrder.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrder.HttpHelp.RSASign(signStr, merchant_private_key); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到Dinpay网关 string _xml = testOrder.HttpHelp.HttpPost("https://api.yuanruic.com/gateway/api/express", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将XML中的参数逐个提取出来 var sign_status1 = el.XPathSelectElement("/response/sign_status"); var merchant_sign_id1 = el.XPathSelectElement("/response/merchant_sign_id"); //去掉首尾的标签并转换成string string sign_status = Regex.Match(sign_status1.ToString(), "(?<=>).*?(?=<)").Value; string merchant_sign_id2 = Regex.Match(merchant_sign_id1.ToString(), "(?<=>).*?(?=<)").Value; if (sign_status == "0") { Response.Write("已签约"); Response.Write(merchant_sign_id2); } if (sign_status == "1") { Response.Write("已解约"); } if (sign_status == "2") { var pay_model1 = el.XPathSelectElement("/response/sign_status"); string pay_mode = Regex.Match(pay_model1.ToString(), "(?<=>).*?(?=<)").Value; if (pay_mode == "0") { Response.Write("API签约"); } else { Response.Write("WEB网页签约"); } } } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/108008008666.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化(version路径需跟证书一致,证书会自动生成version) string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //将字符串发送到Dinpay网关 string _xml = testOrder.HttpHelp.HttpPost("https://api.yuanruic.com/gateway/api/express", para); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //将XML中的参数逐个提取出来 var sign_status1 = el.XPathSelectElement("/response/sign_status"); var merchant_sign_id1 = el.XPathSelectElement("/response/merchant_sign_id"); //去掉首尾的标签并转换成string string sign_status = Regex.Match(sign_status1.ToString(), "(?<=>).*?(?=<)").Value; string merchant_sign_id2 = Regex.Match(merchant_sign_id1.ToString(), "(?<=>).*?(?=<)").Value; if (sign_status == "0") { Response.Write("已签约"); Response.Write(merchant_sign_id2); } if (sign_status == "1") { Response.Write("已解约"); } if (sign_status == "2") { var pay_model1 = el.XPathSelectElement("/response/sign_status"); string pay_mode = Regex.Match(pay_model1.ToString(), "(?<=>).*?(?=<)").Value; if (pay_mode == "0") { Response.Write("API签约"); } else { Response.Write("WEB网页签约"); } } } } finally{ } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string interface_version1 = Request.Form["interface_version"].ToString().Trim(); string input_charset1 = Request.Form["input_charset"].ToString().Trim(); string service_type1 = Request.Form["service_type"].ToString().Trim(); string sign_type1 = Request.Form["sign_type"].ToString().Trim(); string merchant_code1 = Request.Form["merchant_code"].ToString().Trim(); string order_no1 = Request.Form["order_no"].ToString().Trim(); string order_amount1 = Request.Form["order_amount"].ToString().Trim(); string order_time1 = Request.Form["order_time"].ToString().Trim(); string notify_url1 = Request.Form["notify_url"].ToString().Trim(); string card_type1 = Request.Form["card_type"].ToString().Trim(); string mobile1 = Request.Form["mobile"].ToString().Trim(); string bank_code1 = Request.Form["bank_code"].ToString().Trim(); string product_name1 = Request.Form["product_name"].ToString().Trim(); string product_code1 = Request.Form["product_code"].ToString().Trim(); string product_num1 = Request.Form["product_num"].ToString().Trim(); string product_desc1 = Request.Form["product_desc"].ToString().Trim(); string card_no = Request.Form["card_no"].ToString().Trim(); string card_name = Request.Form["card_name"].ToString().Trim(); string id_no = Request.Form["id_no"].ToString().Trim(); string card_cvv2 = Request.Form["card_cvv2"].ToString().Trim(); string card_exp_date = Request.Form["card_exp_date"].ToString().Trim(); string encrypt_info1 = card_no + "|" + card_name + "|" + id_no; //组装敏感数据 ////使用康付通公钥对卡号和卡密加密【康付通公钥需从商家后台-公钥管理中取出】////////// string encryption_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTE8YBexrEmn8oEqsASVgkZEUo/WTqKZlmr0MYDyIVgcNfvXJPUR9kD46RAT11UYKK681UI0IWcfi/uB+bL00bVzuW7x5YdT5zdDuca/i3H3MIbWMcAHXAqPQt38Z0yWoXoCJp0IZ975vBVSe/a70M7uh1aLSapQFKyUCO2i3hGwIDAQAB"; //////////将公钥转换成C#专用格式/////////// encryption_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(encryption_key); //加密后的卡号密码 string encrypt_info2 = testOrder.HttpHelp.RSAEncrypt(encrypt_info1, encryption_key); ////////////////组装签名///////////////// string signStr = "bank_code=" + bank_code1 + "&card_type=" + card_type1 + "&encrypt_info=" + encrypt_info2 + "&input_charset=" + input_charset1 + "&interface_version=" + interface_version1 + "&merchant_code=" + merchant_code1 + "&mobile=" + mobile1 + "¬ify_url=" + notify_url1 + "&order_amount=" + order_amount1 + "&order_no=" + order_no1 + "&order_time=" + order_time1 + "&product_name=" + product_name1 + "&service_type=" + service_type1; if (sign_type1 == "RSA-S")//RSA-S签名方法 { //商家私钥 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALIgluJzrKhOw/+sKlUZW+GFISjeXCqNz45rhEd4pRhg92ZDwyJxsIWVMUggCJLjSAke2wmVOiYJB/V9rNwlCzal5BGCSD0y8VckUb8LMv5wnNxr3wjrXf6IbZWsgNOwZg1mo+Cji5LCwoKvYvbZNK33Nb9MwbBh1PHUVP8AsfM3AgMBAAECgYEAr6oyAtse39Dlu+OWz9u1X/+BhyNa82Bs20Au8KkK77LY6NJUw0gpVGOgeUeWDP31kYELdDTlZpMrdS9eZLBnj/QofFTx7GSeod+vV13cgA6rc0yzjTp25Dm7Xzihf15R5JiNIFzlSYC2TLz+HcJoprxY6Pf6I/1qBjZuoC67eEECQQDjDhEI7s010aXXYQy3xwC/RUDosnfMARqRCpYFCYmoyMiUZ7+ohIvWkkCcwHx7VNKnXfmF0ezdXNT2TCKfXj6hAkEAyNXFKkCPtbg+GFqUlxlfta1s7FJuC1b8ZyaA1ygqUK5PJUoEKR9UcDg0uCKx4Zofpm46WCHx8w8M0+Abss8a1wJAA5JqFDDli44zxLKjJ5T63wdw4PhFyDDQQS3gdE3VG5GlDiifrEABjyuX1p90leAcvENPNJq71jOqqgFCni02YQJAQ8q09SA54lNA0qOwyJhOEFtsCxGAB9/i70a18uqh7f4IxUOIyADFVeQDF6zOcqK90EYg96Ltsuf/on1hnCgAnQJBANGvRflfL1Xvelv2jb446Gnq83IwQ6WJvO8z7/awfMmDsC88MI2bE0xcWJ2QPZZEVJkgCmwOXc26G+z0eei/z/U="; //私钥转换成C#专用私钥 merchant_private_key = testOrder.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrder.HttpHelp.RSASign(signStr, merchant_private_key); sign.Value = signData; } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/108008008666.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化 string signData = rsaWithH.Sign(signStr); //签名 sign.Value = signData; } interface_version.Value = interface_version1; input_charset.Value = input_charset1; service_type.Value = service_type1; sign_type.Value = sign_type1; merchant_code.Value = merchant_code1; order_no.Value = order_no1; order_amount.Value = order_amount1; order_time.Value = order_time1; notify_url.Value = notify_url1; card_type.Value = card_type1; mobile.Value = mobile1; bank_code.Value = bank_code1; product_name.Value = product_name1; encrypt_info.Value = encrypt_info2; } finally { } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string interface_version1 = Request.Form["interface_version"].ToString().Trim(); string input_charset1 = Request.Form["input_charset"].ToString().Trim(); string service_type1 = Request.Form["service_type"].ToString().Trim(); string sign_type1 = Request.Form["sign_type"].ToString().Trim(); string merchant_code1 = Request.Form["merchant_code"].ToString().Trim(); string order_no1 = Request.Form["order_no"].ToString().Trim(); string order_amount1 = Request.Form["order_amount"].ToString().Trim(); string order_time1 = Request.Form["order_time"].ToString().Trim(); string notify_url1 = Request.Form["notify_url"].ToString().Trim(); string card_type1 = Request.Form["card_type"].ToString().Trim(); string mobile1 = Request.Form["mobile"].ToString().Trim(); string bank_code1 = Request.Form["bank_code"].ToString().Trim(); string product_name1 = Request.Form["product_name"].ToString().Trim(); string product_code1 = Request.Form["product_code"].ToString().Trim(); string product_num1 = Request.Form["product_num"].ToString().Trim(); string product_desc1 = Request.Form["product_desc"].ToString().Trim(); string card_no = Request.Form["card_no"].ToString().Trim(); string card_name = Request.Form["card_name"].ToString().Trim(); string id_no = Request.Form["id_no"].ToString().Trim(); string card_cvv2 = Request.Form["card_cvv2"].ToString().Trim(); string card_exp_date = Request.Form["card_exp_date"].ToString().Trim(); string encrypt_info1 = card_no + "|" + card_name + "|" + id_no; //组装敏感数据 ////使用公钥对卡号和卡密加密【公钥需从商家后台-公钥管理中取出】////////// string encryption_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCbT0QjejG8pj8y/HfmzL7j9gHFKTwSg68ZiOad4ErxkSi/N77HnG+scCXVnkvvBwPTFI35AStGQnv3E/7XeCO8swvVR8J4w/k5JfQwcHnSk64DD0L+0KH6cRN27WZYdL9n4r+jW6OXILnbw0t1YM0/y6cOCc4R8yyd1hTCdgP3LwIDAQAB"; //////////将公钥转换成C#专用格式/////////// encryption_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(encryption_key); //加密后的卡号密码 string encrypt_info2 = testOrder.HttpHelp.RSAEncrypt(encrypt_info1, encryption_key); ////////////////组装签名///////////////// string signStr = "bank_code=" + bank_code1 + "&card_type=" + card_type1 + "&encrypt_info=" + encrypt_info2 + "&input_charset=" + input_charset1 + "&interface_version=" + interface_version1 + "&merchant_code=" + merchant_code1 + "&mobile=" + mobile1 + "¬ify_url=" + notify_url1 + "&order_amount=" + order_amount1 + "&order_no=" + order_no1 + "&order_time=" + order_time1 + "&product_name=" + product_name1 + "&service_type=" + service_type1; if (sign_type1 == "RSA-S")//RSA-S签名方法 { //商家私钥 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOD/K22eGec3qNQmk9LwsjpbJDJE9JYfsTJJQGJhfWsKbcZ9UISKXZxuhSCVaf2z9/pEln5RoE7GNwOrYv8R00P8nRJONHNPaLcf0Y8+c6DBWGVewZKojUzn18uAEGGW5XMjLs5/OU//opRB4ieeSmBJ4jp954XfR4Z57bjOpe/3AgMBAAECgYEArCr2K2JQxfp0aSq/8SkX6Mm3T/QuCPZlXGprJx0coJ0RVVKtG07ZxQtZOY671VQyjEKRukVx2vWYQWmTTkVwl+U71fh1mmiu00Y3odNoERc02ZN0zJmrSuhbcuEv6F8kBATunB55wOZ3jlbkXD9h+KUyePBOkrPb+81LhJ6kZXkCQQD18nQ1U2m9laS8ROJmZ1LuecQ4maaHW3xFxHoM9sS1YcpB3peQuXBrKa483zYADIJV2NYstc0QXMMZIXleKFFzAkEA6jF+xx4q+p/lhH8M3rHucHmkgFce90Jh1eHTdx5czizl3LiOYZ5D7cNL8x7piJDMmzkVz8+OidXm0wf5aT82bQJAP9TSJjjk26hn3dj+7Vbppi0CKTJvjvfGdBD/IDg3a1/a72eG7K/EJnvl1bSUvkSA2yjwxR/V/eYlWHNgnXhXUwJBANA6h+3FfhNvXmSrjqbncAljrwdJ70eMJ29DpoFQZtYPB6Z0FmzniqB6OCqIPr7leHc/j4xBkQwvO1hBy9pvkRUCQEVOGouGVeiXL/MuupUdbdBSV4nkYb9hrqE11gzbLu4A+OCpV8Xwdqu5SqX9Js1mQ6vQwTHu63vyfpxxl7oN9Jw="; //私钥转换成C#专用私钥 merchant_private_key = testOrder.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrder.HttpHelp.RSASign(signStr, merchant_private_key); sign.Value = signData; } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/800004007888.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化 string signData = rsaWithH.Sign(signStr); //签名 sign.Value = signData; } interface_version.Value = interface_version1; input_charset.Value = input_charset1; service_type.Value = service_type1; sign_type.Value = sign_type1; merchant_code.Value = merchant_code1; order_no.Value = order_no1; order_amount.Value = order_amount1; order_time.Value = order_time1; notify_url.Value = notify_url1; card_type.Value = card_type1; mobile.Value = mobile1; bank_code.Value = bank_code1; product_name.Value = product_name1; encrypt_info.Value = encrypt_info2; } finally { } }
protected void Page_Load(object sender, EventArgs e) { string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string notify_type = Request.Form["notify_type"].ToString().Trim(); string notify_id = Request.Form["notify_id"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string dinpaysign = Request.Form["sign"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string extra_return_param = Request.Form["extra_return_param"]; string trade_no = Request.Form["trade_no"].ToString().Trim(); string trade_time = Request.Form["trade_time"].ToString().Trim(); string trade_status = Request.Form["trade_status"].ToString().Trim(); string bank_seq_no = Request.Form["bank_seq_no"]; string signStr = ""; if (null != bank_seq_no && bank_seq_no != "") { signStr = signStr + "bank_seq_no=" + bank_seq_no.ToString().Trim() + "&"; } if (null != extra_return_param && extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } signStr = signStr + "interface_version=V3.0" + "&"; signStr = signStr + "merchant_code=" + merchant_code + "&"; if (null != notify_id && notify_id != "") { signStr = signStr + "notify_id=" + notify_id + "¬ify_type=" + notify_type + "&"; } signStr = signStr + "order_amount=" + order_amount + "&"; signStr = signStr + "order_no=" + order_no + "&"; signStr = signStr + "order_time=" + order_time + "&"; signStr = signStr + "trade_no=" + trade_no + "&"; signStr = signStr + "trade_status=" + trade_status + "&"; if (null != trade_time && trade_time != "") { signStr = signStr + "trade_time=" + trade_time; } if (sign_type == "RSA-S") //for sign_type = "RSA-S" { //dinpay_public_key,copy it form Dinpay merchant system,find it on "Payment Management"->"Public Key Management"->"Dinpay Public Key" // this dinpay_public_key is for merchant ID 1111110166 string dinpay_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWOq5aHSTvdxGPDKZWSl6wrPpn" + "MHW+8lOgVU71jB2vFGuA6dwa/RpJKnz9zmoGryZlgUmfHANnN0uztkgwb+5mpgme" + "gBbNLuGqqHBpQHo2EsiAhgvgO3VRmWC8DARpzNxknsJTBhkUvZdy4GyrjnUrvsAR" + "g4VrFzKDWL0Yu3gunQIDAQAB"; dinpay_public_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(dinpay_public_key); bool result = testOrder.HttpHelp.ValidateRsaSign(signStr, dinpay_public_key, dinpaysign); if (result == true) { Response.Write("verify sucessful"); } else { Response.Write("verify failed"); } } else//for sign_type = "RSA" { string merPubKeyDir = "D:/1111110166.pfx";//get the pfx cetification on Dinpay mechant system,"Payment Management"->"Download Cetification" string password = "******"; RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); bool result = rsaWithH.VerifySign("1111110166", signStr, dinpaysign); if (result == true) { Response.Write("verify sucessful"); } else { Response.Write("verify failed"); } } }
protected void Page_Load(object sender, EventArgs e) { //获取反馈信息 string merchant_code = Request.Form["merchant_code"]; string notify_type = Request.Form["notify_type"]; string notify_id = Request.Form["notify_id"].ToString().Trim(); string interface_version = Request.Form["interface_version"]; string sign_type = Request.Form["sign_type"]; string zhihfsign = Request.Form["sign"]; string order_no = Request.Form["order_no"]; string order_time = Request.Form["order_time"]; string order_amount = Request.Form["order_amount"]; string extra_return_param = Request.Form["extra_return_param"]; string trade_no = Request.Form["trade_no"]; string trade_time = Request.Form["trade_time"]; string trade_status = Request.Form["trade_status"]; string bank_seq_no = Request.Form["bank_seq_no"]; /** *签名顺序按照参数名a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推, *参数名1=参数值1&参数名2=参数值2&……&参数名n=参数值n **/ //组织订单信息 string signStr = ""; if (bank_seq_no != "") { signStr = signStr + "bank_seq_no=" + bank_seq_no + "&"; } if (extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } if (interface_version != "") { signStr = signStr + "interface_version=" + interface_version + "&"; } if (merchant_code != "") { signStr = signStr + "merchant_code=" + merchant_code + "&"; } if (notify_id != "") { signStr = signStr + "notify_id=" + notify_id + "&"; } if (notify_type != "") { signStr = signStr + "notify_type=" + notify_type + "&"; } if (order_amount != "") { signStr = signStr + "order_amount=" + order_amount + "&"; } if (order_no != "") { signStr = signStr + "order_no=" + order_no + "&"; } if (order_time != "") { signStr = signStr + "order_time=" + order_time + "&"; } if (trade_no != "") { signStr = signStr + "trade_no=" + trade_no + "&"; } if (trade_status != "") { signStr = signStr + "trade_status=" + trade_status + "&"; } if (trade_time != "") { signStr = signStr + "trade_time=" + trade_time; } if (sign_type == "RSA-S") //RSA-S的验签方法 { //使用公钥对返回的数据验签 string zhihf_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZDDIp0i3Ai7hskWs03M8n9QXrz3FX+KXak/zhy+rO7IBCE2p7mqHgMzj2KTqPfeQyAJoF6WvNy9MT9Vf/MA1mcYpYp9vVXRlLZ9oCFGUHtL2VJJHPzKlit46OGhyU7z/jtWwDuRXqcO76+VPi0/1XOvsyR5lTDKB3LVQA4cPD3wIDAQAB"; //将公钥转换成C#专用格式 zhihf_public_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(zhihf_public_key); //验签 bool result = testOrder.HttpHelp.ValidateRsaSign(signStr, zhihf_public_key, zhihfsign); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后打印SUCCESS Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } else //RSA验签方法 { string merPubKeyDir = "D:/1111110166.pfx"; string password = "******"; RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); bool result = rsaWithH.VerifySign("1111110166", signStr, zhihfsign); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后必须打印SUCCESS来响应智付服务器以示商户已经正常收到服务器发送的异步数据通知,否则服务器将会在之后的时间内若干次发送同一笔订单的异步数据!! Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); ///////////////////////////// 数据签名 ///////////////////////////////// //////////////////////////// Data signature //////////////////////////// string signStr = "interface_version=" + interface_version + "&merchant_code=" + merchant_code + "&order_no=" + order_no + "&service_type=" + service_type; if (sign_type == "RSA-S") //RSA-S签名方法 { //商家私钥 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALf/+xHa1fDTCsLYPJLHy80aWq3djuV1T34sEsjp7UpLmV9zmOVMYXsoFNKQIcEzei4QdaqnVknzmIl7n1oXmAgHaSUF3qHjCttscDZcTWyrbXKSNr8arHv8hGJrfNB/Ea/+oSTIY7H5cAtWg6VmoPCHvqjafW8/UP60PdqYewrtAgMBAAECgYEAofXhsyK0RKoPg9jA4NabLuuuu/IU8ScklMQIuO8oHsiStXFUOSnVeImcYofaHmzIdDmqyU9IZgnUz9eQOcYg3BotUdUPcGgoqAqDVtmftqjmldP6F6urFpXBazqBrrfJVIgLyNw4PGK6/EmdQxBEtqqgXppRv/ZVZzZPkwObEuECQQDenAam9eAuJYveHtAthkusutsVG5E3gJiXhRhoAqiSQC9mXLTgaWV7zJyA5zYPMvh6IviX/7H+Bqp14lT9wctFAkEA05ljSYShWTCFThtJxJ2d8zq6xCjBgETAdhiH85O/VrdKpwITV/6psByUKp42IdqMJwOaBgnnct8iDK/TAJLniQJABdo+RodyVGRCUB2pRXkhZjInbl+iKr5jxKAIKzveqLGtTViknL3IoD+Z4b2yayXg6H0g4gYj7NTKCH1h1KYSrQJBALbgbcg/YbeU0NF1kibk1ns9+ebJFpvGT9SBVRZ2TjsjBNkcWR2HEp8LxB6lSEGwActCOJ8Zdjh4kpQGbcWkMYkCQAXBTFiyyImO+sfCccVuDSsWS+9jrc5KadHGIvhfoRjIj2VuUKzJ+mXbmXuXnOYmsAefjnMCI6gGtaqkzl527tw="; //私钥转换成C#专用私钥 merchant_private_key = testOrderQuery.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrderQuery.HttpHelp.RSASign(signStr, merchant_private_key); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.HttpPost("https://query.wordfod.com/query", para); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchantcode1 = el.XPathSelectElement("/response/trade/merchant_code"); var orderno1 = el.XPathSelectElement("/response/trade/order_no"); var ordertime1 = el.XPathSelectElement("/response/trade/order_time"); var orderamount1 = el.XPathSelectElement("/response/trade/order_amount"); var orginal_money1 = el.XPathSelectElement("/response/trade/orginal_money"); var trade_no1 = el.XPathSelectElement("/response/trade/trade_no"); var trade_time1 = el.XPathSelectElement("/response/trade/trade_time"); var zhihfsign1 = el.XPathSelectElement("/response/sign"); var trade_status1 = el.XPathSelectElement("/response/trade/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string orginal_money = Regex.Match(orginal_money1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string trade_time = Regex.Match(trade_time1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string zhihfsign = Regex.Match(zhihfsign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&orginal_money=" + orginal_money + "&trade_no=" + trade_no + "&trade_status=" + trade_status + "&trade_time=" + trade_time; //使用公钥对数据验签 string zhihpayPubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWOq5aHSTvdxGPDKZWSl6wrPpnMHW+8lOgVU71jB2vFGuA6dwa/RpJKnz9zmoGryZlgUmfHANnN0uztkgwb+5mpgmegBbNLuGqqHBpQHo2EsiAhgvgO3VRmWC8DARpzNxknsJTBhkUvZdy4GyrjnUrvsARg4VrFzKDWL0Yu3gunQIDAQAB"; //将公钥转换成C#专用格式 zhihpayPubKey = testOrderQuery.HttpHelp.RSAPublicKeyJava2DotNet(zhihpayPubKey); //验签 bool validateResult = testOrderQuery.HttpHelp.ValidateRsaSign(signsrc, zhihpayPubKey, zhihfsign); if (validateResult == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/1111110166.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化。设置dinpayRSAKeyVersion的路径与证书路径一致即可 string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.HttpPost("https://query.wordfod.com/query", para); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchantcode1 = el.XPathSelectElement("/response/trade/merchant_code"); var orderno1 = el.XPathSelectElement("/response/trade/order_no"); var ordertime1 = el.XPathSelectElement("/response/trade/order_time"); var orderamount1 = el.XPathSelectElement("/response/trade/order_amount"); var trade_no1 = el.XPathSelectElement("/response/trade/trade_no"); var trade_time1 = el.XPathSelectElement("/response/trade/trade_time"); var zhihfsign1 = el.XPathSelectElement("/response/sign"); var trade_status1 = el.XPathSelectElement("/response/trade/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string trade_time = Regex.Match(trade_time1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string zhihfsign = Regex.Match(zhihfsign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&trade_no=" + trade_no + "&trade_status=" + trade_status + "&trade_time=" + trade_time; bool result = rsaWithH.VerifySign("1111110166", signsrc, zhihfsign); if (result == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } } finally { } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string input_charset1 = Request.Form["input_charset"].ToString().Trim(); string interface_version1 = Request.Form["interface_version"].ToString().Trim(); string merchant_code1 = Request.Form["merchant_code"].ToString().Trim(); string notify_url1 = Request.Form["notify_url"].ToString().Trim(); string order_amount1 = Request.Form["order_amount"].ToString().Trim(); string order_no1 = Request.Form["order_no"].ToString().Trim(); string order_time1 = Request.Form["order_time"].ToString().Trim(); string sign_type1 = Request.Form["sign_type"].ToString().Trim(); string product_code1 = Request.Form["product_code"].ToString().Trim(); string product_desc1 = Request.Form["product_desc"].ToString().Trim(); string product_name1 = Request.Form["product_name"].ToString().Trim(); string product_num1 = Request.Form["product_num"].ToString().Trim(); string return_url1 = Request.Form["return_url"].ToString().Trim(); string service_type1 = Request.Form["service_type"].ToString().Trim(); string show_url1 = Request.Form["show_url"].ToString().Trim(); string extend_param1 = Request.Form["extend_param"].ToString().Trim(); string extra_return_param1 = Request.Form["extra_return_param"].ToString().Trim(); string bank_code1 = Request.Form["bank_code"].ToString().Trim(); string client_ip1 = Request.Form["client_ip"].ToString().Trim(); string client_ip_check1 = Request.Form["client_ip_check"].ToString().Trim(); string redo_flag1 = Request.Form["redo_flag"].ToString().Trim(); string pay_type1 = Request.Form["pay_type"].ToString().Trim(); ////////////////组装签名参数////////////////// string signSrc = ""; //组织订单信息 if (bank_code1 != "") { signSrc = signSrc + "bank_code=" + bank_code1 + "&"; } if (client_ip1 != "") { signSrc = signSrc + "client_ip=" + client_ip1 + "&"; } if (client_ip_check1 != "") { signSrc = signSrc + "client_ip_check=" + client_ip_check1 + "&"; } if (extend_param1 != "") { signSrc = signSrc + "extend_param=" + extend_param1 + "&"; } if (extra_return_param1 != "") { signSrc = signSrc + "extra_return_param=" + extra_return_param1 + "&"; } if (input_charset1 != "") { signSrc = signSrc + "input_charset=" + input_charset1 + "&"; } if (interface_version1 != "") { signSrc = signSrc + "interface_version=" + interface_version1 + "&"; } if (merchant_code1 != "") { signSrc = signSrc + "merchant_code=" + merchant_code1 + "&"; } if (notify_url1 != "") { signSrc = signSrc + "notify_url=" + notify_url1 + "&"; } if (order_amount1 != "") { signSrc = signSrc + "order_amount=" + order_amount1 + "&"; } if (order_no1 != "") { signSrc = signSrc + "order_no=" + order_no1 + "&"; } if (order_time1 != "") { signSrc = signSrc + "order_time=" + order_time1 + "&"; } if (pay_type1 != "") { signSrc = signSrc + "pay_type=" + pay_type1 + "&"; } if (product_code1 != "") { signSrc = signSrc + "product_code=" + product_code1 + "&"; } if (product_desc1 != "") { signSrc = signSrc + "product_desc=" + product_desc1 + "&"; } if (product_name1 != "") { signSrc = signSrc + "product_name=" + product_name1 + "&"; } if (product_num1 != "") { signSrc = signSrc + "product_num=" + product_num1 + "&"; } if (redo_flag1 != "") { signSrc = signSrc + "redo_flag=" + redo_flag1 + "&"; } if (return_url1 != "") { signSrc = signSrc + "return_url=" + return_url1 + "&"; } if (service_type1 != "") { signSrc = signSrc + "service_type=" + service_type1; } if (show_url1 != "") { signSrc = signSrc + "&show_url=" + show_url1; } if (sign_type1 == "RSA-S")//RSA-S签名方法 { /** merchant_private_key,商户私钥,商户按照《密钥对获取工具说明》操作并获取商户私钥。获取商户私钥的同时,也要 * 获取商户公钥(merchant_public_key)并且将商户公钥上传到商家后台"公钥管理"(如何获取和上传请看《密钥对获取工具说明》), * 不上传商户公钥会导致调试的时候报错“签名错误”。 */ //demo提供的merchant_private_key是测试商户号1111110166的商户私钥,请自行获取商户私钥并且替换。 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKn93SEpidIRKTYRqvjb6qW6iS8eorY/5nPwBE2xk7tdulDsWCZzLtt9oSCDZj6QTFXjXQZKO03cyvVPS5gZ1MIeW0ARkfcwdrJ6EawonKS909lIflCfCKCC9oCqHIhFXFmK9AU6UjcTwE5nwwb3K689Ng+6SEVjHMendtV3OTjDAgMBAAECgYBxx+QtADqpiqcE88p2i+yBRVvxWBYc2qSL0Ylv3348mT3OUIOoKMyiSXKB6rGTCs6tZmOrhCAxu6l1jL/SbOfEd33TSUmMSTAyLhq3Uc1kRa9D8u7hJHqHRJeG5NNU/rJy5t9ncBI9ktEKpWKQpix1WfqSsfeO+TKUfMNWOlDmIQJBANEqg7UrJ68n2rFpN281HDsVR12IQnBKyFtDqBZ33bWXR+yAXRexwLUvPZYaBuBEp9KcIBee9g0J6IY8W84Z5GsCQQDQDdsHOhAd01KhANnGz7FkIbac9vEohbovzlMeOPV7wXbsZR+ZrqJXzhbuvU8sjCGDItf5KRCtT+rjIofGJNMJAkEAos1WinK2hqycma3tic9q08nyLCjcnY53eCGm+SX/GVJQlxIqY0DlX6EPbH+Bjpmhjloa2IfPt8JYi/L6+eZJVQJANCfVCXm/wopQQ3ZAIbu9H3noGm85Q0xKwWM6qO/kcjKsilRLWK5TmilazFx+tY8nc4VPmPF3ccr/+hKU8NIYaQJBAL+bKSa+9N3aR1OnCfBf7Tf5hvCVCR7gKoo5llOH3yo+pNLBDdI4TDDueSoK0UD8t1nodrgZMc/sbch+9zWswQA="; //私钥转换成C#专用私钥 merchant_private_key = testOrder.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrder.HttpHelp.RSASign(signSrc, merchant_private_key); sign.Value = signData; } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/1111110166.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化(version路径需跟证书一致,证书会自动生成version) string signData = rsaWithH.Sign(signSrc); //签名 sign.Value = signData; } merchant_code.Value = merchant_code1; bank_code.Value = bank_code1; order_no.Value = order_no1; order_amount.Value = order_amount1; service_type.Value = service_type1; input_charset.Value = input_charset1; notify_url.Value = notify_url1; interface_version.Value = interface_version1; sign_type.Value = sign_type1; order_time.Value = order_time1; product_name.Value = product_name1; client_ip.Value = client_ip1; client_ip_check.Value = client_ip_check1; extend_param.Value = extend_param1; extra_return_param.Value = extra_return_param1; product_code.Value = product_code1; product_desc.Value = product_desc1; product_num.Value = product_num1; return_url.Value = return_url1; show_url.Value = show_url1; redo_flag.Value = redo_flag1; pay_type.Value = pay_type1; } finally { } }
protected void Page_Load(object sender, EventArgs e) { //获取反馈信息 string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string notify_type = Request.Form["notify_type"].ToString().Trim(); string notify_id = Request.Form["notify_id"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string zhfsign = Request.Form["sign"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string extra_return_param = Request.Form["extra_return_param"]; string trade_no = Request.Form["trade_no"].ToString().Trim(); string trade_time = Request.Form["trade_time"].ToString().Trim(); string trade_status = Request.Form["trade_status"].ToString().Trim(); string bank_seq_no = Request.Form["bank_seq_no"]; /** *签名顺序按照参数名a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推, *参数名1=参数值1&参数名2=参数值2&……&参数名n=参数值n&key=key值 **/ //组织订单信息 string signStr = ""; if (null != bank_seq_no && bank_seq_no != "") { signStr = signStr + "bank_seq_no=" + bank_seq_no.ToString().Trim() + "&"; } if (null != extra_return_param && extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } signStr = signStr + "interface_version=V3.0" + "&"; signStr = signStr + "merchant_code=" + merchant_code + "&"; if (null != notify_id && notify_id != "") { signStr = signStr + "notify_id=" + notify_id + "¬ify_type=" + notify_type + "&"; } signStr = signStr + "order_amount=" + order_amount + "&"; signStr = signStr + "order_no=" + order_no + "&"; signStr = signStr + "order_time=" + order_time + "&"; signStr = signStr + "trade_no=" + trade_no + "&"; signStr = signStr + "trade_status=" + trade_status + "&"; if (null != trade_time && trade_time != "") { signStr = signStr + "trade_time=" + trade_time; } if (sign_type == "RSA-S") //RSA-S的验签方法 { /** * 1)zhf_public_key,公钥,每个商家对应一个固定的公钥(不是使用工具生成的密钥merchant_public_key,不要混淆), * 即为商家后台"公钥管理"->"公钥"里的绿色字符串内容 * 2)demo提供的zhf_public_key是测试商户号800003004321的公钥,请自行复制对应商户号的公钥进行调整和替换。 */ string zhf_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLYAY1pTXcMwKKagEgKxv0Wtq0EwcKxQdQ6X+duKWWY1ti+YMSKx5RwUNPSqm9u59GkbFCHScOw+pZvHnDl47uaOV0NcxJU9CuGQ4UkuN5zJS/g/Fi4IFtQpLJPM5pJGNvnBkJzfqAD8DGOPoAc0TypMq2/HEVRMWU6PYBIiFa+QIDAQAB"; //将公钥转换成C#专用格式 zhf_public_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(zhf_public_key); //验签 bool result = testOrder.HttpHelp.ValidateRsaSign(signStr, zhf_public_key, zhfsign); if (result == true) { //注:建议页面同步通知一般只做订单支付成功提示,而不做订单支付状态更新,更新订单支付状态在notify_url指定的地址处理,请做好订单是否重复修改状态的判断,以免虚拟充值重复到账!! Response.Write("验签成功"); } else { //验签失败 Response.Write("验签失败"); } } else //RSA验签方法 { string merPubKeyDir = "D:/800003004321.pfx"; string password = "******"; RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); bool result = rsaWithH.VerifySign("800003004321", signStr, zhfsign); if (result == true) { //注:建议页面同步通知一般只做订单支付成功提示,而不做订单支付状态更新,更新订单支付状态在notify_url指定的地址处理,请做好订单是否重复修改状态的判断,以免虚拟充值重复到账!! Response.Write("验签成功"); } else { //验签失败 Response.Write("验签失败"); } } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); ///////////////////////////// 数据签名 ///////////////////////////////// string signStr = "interface_version=" + interface_version + "&merchant_code=" + merchant_code + "&order_no=" + order_no + "&service_type=" + service_type; if (sign_type == "RSA-S") //RSA-S签名方法 { /** merchant_private_key,商户私钥,商户按照《密钥对获取工具说明》操作并获取商户私钥。获取商户私钥的同时,也要 * 获取商户公钥(merchant_public_key)并且将商户公钥上传到商家后台"公钥管理"(如何获取和上传请看《密钥对获取工具说明》), * 不上传商户公钥会导致调试的时候报错“签名错误”。 */ //demo提供的merchant_private_key是测试商户号800004007888的商户私钥,请自行获取商户私钥并且替换。 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOD/K22eGec3qNQmk9LwsjpbJDJE9JYfsTJJQGJhfWsKbcZ9UISKXZxuhSCVaf2z9/pEln5RoE7GNwOrYv8R00P8nRJONHNPaLcf0Y8+c6DBWGVewZKojUzn18uAEGGW5XMjLs5/OU//opRB4ieeSmBJ4jp954XfR4Z57bjOpe/3AgMBAAECgYEArCr2K2JQxfp0aSq/8SkX6Mm3T/QuCPZlXGprJx0coJ0RVVKtG07ZxQtZOY671VQyjEKRukVx2vWYQWmTTkVwl+U71fh1mmiu00Y3odNoERc02ZN0zJmrSuhbcuEv6F8kBATunB55wOZ3jlbkXD9h+KUyePBOkrPb+81LhJ6kZXkCQQD18nQ1U2m9laS8ROJmZ1LuecQ4maaHW3xFxHoM9sS1YcpB3peQuXBrKa483zYADIJV2NYstc0QXMMZIXleKFFzAkEA6jF+xx4q+p/lhH8M3rHucHmkgFce90Jh1eHTdx5czizl3LiOYZ5D7cNL8x7piJDMmzkVz8+OidXm0wf5aT82bQJAP9TSJjjk26hn3dj+7Vbppi0CKTJvjvfGdBD/IDg3a1/a72eG7K/EJnvl1bSUvkSA2yjwxR/V/eYlWHNgnXhXUwJBANA6h+3FfhNvXmSrjqbncAljrwdJ70eMJ29DpoFQZtYPB6Z0FmzniqB6OCqIPr7leHc/j4xBkQwvO1hBy9pvkRUCQEVOGouGVeiXL/MuupUdbdBSV4nkYb9hrqE11gzbLu4A+OCpV8Xwdqu5SqX9Js1mQ6vQwTHu63vyfpxxl7oN9Jw="; //私钥转换成C#专用私钥 merchant_private_key = testOrderQuery.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrderQuery.HttpHelp.RSASign(signStr, merchant_private_key); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.httppost("https://query.zdfmf.com/query", para, "UTF-8"); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchantcode1 = el.XPathSelectElement("/response/trade/merchant_code"); var orderno1 = el.XPathSelectElement("/response/trade/order_no"); var ordertime1 = el.XPathSelectElement("/response/trade/order_time"); var orderamount1 = el.XPathSelectElement("/response/trade/order_amount"); var trade_no1 = el.XPathSelectElement("/response/trade/trade_no"); var trade_time1 = el.XPathSelectElement("/response/trade/trade_time"); var zhfsign1 = el.XPathSelectElement("/response/sign"); var trade_status1 = el.XPathSelectElement("/response/trade/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string trade_time = Regex.Match(trade_time1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string zhfsign = Regex.Match(zhfsign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&trade_no=" + trade_no + "&trade_status=" + trade_status + "&trade_time=" + trade_time; /** * 1)zhf_public_key,公钥,每个商家对应一个固定的公钥(不是使用工具生成的密钥merchant_public_key,不要混淆), * 即为商家后台"公钥管理"->"公钥"里的绿色字符串内容 * 2)demo提供的zhf_public_key是测试商户号800004007888的公钥,请自行复制对应商户号的公钥进行调整和替换。 */ string zhf_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZDDIp0i3Ai7hskWs03M8n9QXrz3FX+KXak/zhy+rO7IBCE2p7mqHgMzj2KTqPfeQyAJoF6WvNy9MT9Vf/MA1mcYpYp9vVXRlLZ9oCFGUHtL2VJJHPzKlit46OGhyU7z/jtWwDuRXqcO76+VPi0/1XOvsyR5lTDKB3LVQA4cPD3wIDAQAB"; //将公钥转换成C#专用格式 zhf_public_key = testOrderQuery.HttpHelp.RSAPublicKeyJava2DotNet(zhf_public_key); //验签 bool validateResult = testOrderQuery.HttpHelp.ValidateRsaSign(signsrc, zhf_public_key, zhfsign); if (validateResult == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/800004007888.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.httppost("https://query.zdfmf.com/query", para, "UTF-8"); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/response/is_success"); var merchantcode1 = el.XPathSelectElement("/response/trade/merchant_code"); var orderno1 = el.XPathSelectElement("/response/trade/order_no"); var ordertime1 = el.XPathSelectElement("/response/trade/order_time"); var orderamount1 = el.XPathSelectElement("/response/trade/order_amount"); var trade_no1 = el.XPathSelectElement("/response/trade/trade_no"); var trade_time1 = el.XPathSelectElement("/response/trade/trade_time"); var zhfsign1 = el.XPathSelectElement("/response/sign"); var trade_status1 = el.XPathSelectElement("/response/trade/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string trade_time = Regex.Match(trade_time1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string zhfsign = Regex.Match(zhfsign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&trade_no=" + trade_no + "&trade_status=" + trade_status + "&trade_time=" + trade_time; bool result = rsaWithH.VerifySign("800004007888", signsrc, zhfsign); if (result == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } } finally { } }
protected void Page_Load(object sender, EventArgs e) { try { ////////////////////////To receive the parameter form HTML form////////////////////// string interface_version = Request.Form["interface_version"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string product_name = Request.Form["product_name"].ToString().Trim(); string product_code = Request.Form["product_code"].ToString().Trim(); string product_num = Request.Form["product_num"].ToString().Trim(); string product_desc = Request.Form["product_desc"].ToString().Trim(); string extra_return_param = Request.Form["extra_return_param"].ToString().Trim(); string extend_param = Request.Form["extend_param"].ToString().Trim(); string notify_url = Request.Form["notify_url"].ToString().Trim(); string client_ip = Request.Form["client_ip"].ToString().Trim(); ////////////////Array data////////////////// string signStr = ""; if (client_ip != "") { signStr = signStr + "client_ip=" + client_ip + "&"; } if (extend_param != "") { signStr = signStr + "extend_param=" + extend_param + "&"; } if (extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } if (interface_version != "") { signStr = signStr + "interface_version=" + interface_version + "&"; } if (merchant_code != "") { signStr = signStr + "merchant_code=" + merchant_code + "&"; } if (notify_url != "") { signStr = signStr + "notify_url=" + notify_url + "&"; } if (order_amount != "") { signStr = signStr + "order_amount=" + order_amount + "&"; } if (order_no != "") { signStr = signStr + "order_no=" + order_no + "&"; } if (order_time != "") { signStr = signStr + "order_time=" + order_time + "&"; } if (product_code != "") { signStr = signStr + "product_code=" + product_code + "&"; } if (product_desc != "") { signStr = signStr + "product_desc=" + product_desc + "&"; } if (product_name != "") { signStr = signStr + "product_name=" + product_name + "&"; } if (product_num != "") { signStr = signStr + "product_num=" + product_num + "&"; } if (service_type != "") { signStr = signStr + "service_type=" + service_type; } if (sign_type == "RSA-S")//RSA-S Sign { //merchant private key string merPriKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALf/+xHa1fDTCsLYPJLHy80aWq3djuV1T34sEsjp7UpLmV9zmOVMYXsoFNKQIcEzei4QdaqnVknzmIl7n1oXmAgHaSUF3qHjCttscDZcTWyrbXKSNr8arHv8hGJrfNB/Ea/+oSTIY7H5cAtWg6VmoPCHvqjafW8/UP60PdqYewrtAgMBAAECgYEAofXhsyK0RKoPg9jA4NabLuuuu/IU8ScklMQIuO8oHsiStXFUOSnVeImcYofaHmzIdDmqyU9IZgnUz9eQOcYg3BotUdUPcGgoqAqDVtmftqjmldP6F6urFpXBazqBrrfJVIgLyNw4PGK6/EmdQxBEtqqgXppRv/ZVZzZPkwObEuECQQDenAam9eAuJYveHtAthkusutsVG5E3gJiXhRhoAqiSQC9mXLTgaWV7zJyA5zYPMvh6IviX/7H+Bqp14lT9wctFAkEA05ljSYShWTCFThtJxJ2d8zq6xCjBgETAdhiH85O/VrdKpwITV/6psByUKp42IdqMJwOaBgnnct8iDK/TAJLniQJABdo+RodyVGRCUB2pRXkhZjInbl+iKr5jxKAIKzveqLGtTViknL3IoD+Z4b2yayXg6H0g4gYj7NTKCH1h1KYSrQJBALbgbcg/YbeU0NF1kibk1ns9+ebJFpvGT9SBVRZ2TjsjBNkcWR2HEp8LxB6lSEGwActCOJ8Zdjh4kpQGbcWkMYkCQAXBTFiyyImO+sfCccVuDSsWS+9jrc5KadHGIvhfoRjIj2VuUKzJ+mXbmXuXnOYmsAefjnMCI6gGtaqkzl527tw="; merPriKey = testOrder.HttpHelp.RSAPrivateKeyJava2DotNet(merPriKey); //signature string signData = testOrder.HttpHelp.RSASign(signStr, merPriKey); signData = HttpUtility.UrlEncode(signData); //Array data string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //post data string _xml = testOrder.HttpHelp.HttpPost("https://api.xhbill.com/gateway/api/scanpay", para); //get data from XML var el = XElement.Load(new StringReader(_xml)); //get Qrcode var qrcode1 = el.XPathSelectElement("/response/qrcode"); if (qrcode1 == null) { Response.Write("msg:" + _xml + "<br/>"); Response.End(); } string qrcode = Regex.Match(qrcode1.ToString(), "(?<=>).*?(?=<)").Value; //qrcode //generate qrcode My.Utility.QRCodeHandler qr = new My.Utility.QRCodeHandler(); string path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"/qrcode/"; //path string qrString = qrcode; //qrcode string logoFilePath = path + "my.jpg"; //Logo string filePath = path + "myCode.jpg"; //qrcode name qr.CreateQRCode(qrString, "Byte", 6, 6, "H", filePath, true, logoFilePath); //generate } else //RSA Sign { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/1111110166.pfx"; //certificate path string password = "******"; //certificate password RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //make the Keyversion path same with the certificate string signData = rsaWithH.Sign(signStr); //signature signData = HttpUtility.UrlEncode(signData); //Array data string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //post data string _xml = testOrder.HttpHelp.HttpPost("https://api.xhbill.com/gateway/api/weixin", para); //get data from XML var el = XElement.Load(new StringReader(_xml)); //get Qrcode var qrcode1 = el.XPathSelectElement("/response/qrcode"); if (qrcode1 == null) { Response.Write("msg:" + _xml + "<br/>"); Response.End(); } string qrcode = Regex.Match(qrcode1.ToString(), "(?<=>).*?(?=<)").Value; //qrcode //generate qrcode My.Utility.QRCodeHandler qr = new My.Utility.QRCodeHandler(); string path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"/qrcode/"; //path string qrString = qrcode; //qrcode string logoFilePath = path + "my.jpg"; //Logo string filePath = path + "myCode.jpg"; //qrcode name qr.CreateQRCode(qrString, "Byte", 6, 6, "H", filePath, true, logoFilePath); //generate } } finally{ } }
protected void Back_Load(object sender, EventArgs e) { //获取智付反馈信息 string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string notify_id = Request.Form["notify_id"].ToString().Trim(); string notify_type = Request.Form["notify_type"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string dinpaysign = Request.Form["sign"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string extra_return_param = Request.Form["extra_return_param"].ToString().Trim(); string trade_no = Request.Form["trade_no"].ToString().Trim(); string trade_time = Request.Form["trade_time"].ToString().Trim(); string bank_seq_no = Request.Form["bank_seq_no"].ToString().Trim(); string trade_status = Request.Form["trade_status"].ToString().Trim(); /** *签名顺序按照参数名a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推, *同时将商家支付密钥key放在最后参与签名,组成规则如下: *参数名1=参数值1&参数名2=参数值2&……&参数名n=参数值n **/ //组织订单信息 string signStr = ""; if (bank_seq_no != "") { signStr = signStr + "bank_seq_no=" + bank_seq_no + "&"; } if (extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } if (interface_version != "") { signStr = signStr + "interface_version=" + interface_version + "&"; } if (merchant_code != "") { signStr = signStr + "merchant_code=" + merchant_code + "&"; } if (notify_id != "") { signStr = signStr + "notify_id=" + notify_id + "&"; } if (notify_type != "") { signStr = signStr + "notify_type=" + notify_type + "&"; } if (order_amount != "") { signStr = signStr + "order_amount=" + order_amount + "&"; } if (order_no != "") { signStr = signStr + "order_no=" + order_no + "&"; } if (order_time != "") { signStr = signStr + "order_time=" + order_time + "&"; } if (trade_no != "") { signStr = signStr + "trade_no=" + trade_no + "&"; } if (trade_status != "") { signStr = signStr + "trade_status=" + trade_status + "&"; } if (trade_time != "") { signStr = signStr + "trade_time=" + trade_time; } if (sign_type == "RSA-S") //RSA-S的验签方法 { //使用智付公钥对返回的数据验签 string dinpayPubKey = CSharpTestPay.wechart._Default.dinpayPubKey; /*"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWOq5aHSTvdxGPDKZWSl6wrPpn" + * "MHW+8lOgVU71jB2vFGuA6dwa/RpJKnz9zmoGryZlgUmfHANnN0uztkgwb+5mpgme" + * "gBbNLuGqqHBpQHo2EsiAhgvgO3VRmWC8DARpzNxknsJTBhkUvZdy4GyrjnUrvsAR" + * "g4VrFzKDWL0Yu3gunQIDAQAB";*/ // bank_seq_no=4010022001201705232121737666&interface_version=V3.0&merchant_code=2130000223¬ify_id=75f367ca4e3c4a43870f3977454cbca7¬ify_type=offline_notify&order_amount=1&order_no=RB5403A9509060EC0&order_time=2017-05-23 00:48:12&trade_no=1475935343&trade_status=SUCCESS&trade_time=2017-05-23 00:48:14 //将智付公钥转换成C#专用格式 dinpayPubKey = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(dinpayPubKey); //验签 bool result = testOrder.HttpHelp.ValidateRsaSign(signStr, dinpayPubKey, dinpaysign); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后打印SUCCESS Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } else //RSA验签方法 { string merPubKeyDir = "D:/1111110166.pfx"; string password = "******"; RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); bool result = rsaWithH.VerifySign("1111110166", signStr, dinpaysign); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后必须打印SUCCESS来响应智付服务器以示商户已经正常收到智付服务器发送的异步数据通知,否则智付服务器将会在之后的时间内若干次发送同一笔订单的异步数据!! Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } }
protected void Back_Load(object sender, EventArgs e) { //获取反馈信息 string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string notify_id = Request.Form["notify_id"].ToString().Trim(); string notify_type = Request.Form["notify_type"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string dinpaysign = Request.Form["sign"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); string order_time = Request.Form["order_time"].ToString().Trim(); string order_amount = Request.Form["order_amount"].ToString().Trim(); string extra_return_param = Request.Form["extra_return_param"].ToString().Trim(); string trade_no = Request.Form["trade_no"].ToString().Trim(); string trade_time = Request.Form["trade_time"].ToString().Trim(); string trade_status = Request.Form["trade_status"].ToString().Trim(); string bank_seq_no = Request.Form["bank_seq_no"].ToString().Trim(); /** *签名顺序按照参数名a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推, *同时将商家支付密钥key放在最后参与签名,组成规则如下: *参数名1=参数值1&参数名2=参数值2&……&参数名n=参数值n **/ //组织订单信息 string signStr = ""; if (bank_seq_no != "") { signStr = signStr + "bank_seq_no=" + bank_seq_no + "&"; } if (extra_return_param != "") { signStr = signStr + "extra_return_param=" + extra_return_param + "&"; } if (interface_version != "") { signStr = signStr + "interface_version=" + interface_version + "&"; } if (merchant_code != "") { signStr = signStr + "merchant_code=" + merchant_code + "&"; } if (notify_id != "") { signStr = signStr + "notify_id=" + notify_id + "&"; } if (notify_type != "") { signStr = signStr + "notify_type=" + notify_type + "&"; } if (order_amount != "") { signStr = signStr + "order_amount=" + order_amount + "&"; } if (order_no != "") { signStr = signStr + "order_no=" + order_no + "&"; } if (order_time != "") { signStr = signStr + "order_time=" + order_time + "&"; } if (trade_no != "") { signStr = signStr + "trade_no=" + trade_no + "&"; } if (trade_status != "") { signStr = signStr + "trade_status=" + trade_status + "&"; } if (trade_time != "") { signStr = signStr + "trade_time=" + trade_time + "&"; } if (sign_type == "RSA-S") //RSA-S的验签方法 { //使用公钥对返回的数据验签 string dinpay_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCBxRoYbPf95kv1l4av8Ggc/adZp22GVjZ+Al1UBUM2nxqaluPfQ8gnjcGNNEOAA+iWDkjrh9PVKgXSCRel3VbDiDtz0vrMRmhQ0W5CsBATBFrAlG4oh13FB4wTEP3qd1HST5nEdTBhdp06y8M16A59N5UY+s3oTwkF5KIJjuGdnQIDAQAB"; //将公钥转换成C#专用格式 dinpay_public_key = testOrder.HttpHelp.RSAPublicKeyJava2DotNet(dinpay_public_key); //验签 bool result = testOrder.HttpHelp.ValidateRsaSign(signStr, dinpay_public_key, dinpaysign); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后打印SUCCESS Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } else //RSA验签方法 { string merPubKeyDir = "D:/200001001888.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); //初始化(version路径需跟证书一致,证书会自动生成version) //验签 bool result = rsaWithH.VerifySign("200001001888", signStr, dinpaysign); if (result == true) { //如果验签结果为true,则对订单进行更新 //订单更新完之后必须打印SUCCESS来响应中鼎融服务器以示商户已经正常收到中鼎融服务器发送的异步数据通知,否则中鼎融服务器将会在之后的时间内若干次发送同一笔订单的异步数据!! Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); ///////////////////////////// 数据签名 ///////////////////////////////// //////////////////////////// Data signature //////////////////////////// string signStr = "interface_version=" + interface_version + "&merchant_code=" + merchant_code + "&order_no=" + order_no + "&service_type=" + service_type; if (sign_type == "RSA-S") //RSA-S签名方法 { //商家私钥 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALIgluJzrKhOw/+sKlUZW+GFISjeXCqNz45rhEd4pRhg92ZDwyJxsIWVMUggCJLjSAke2wmVOiYJB/V9rNwlCzal5BGCSD0y8VckUb8LMv5wnNxr3wjrXf6IbZWsgNOwZg1mo+Cji5LCwoKvYvbZNK33Nb9MwbBh1PHUVP8AsfM3AgMBAAECgYEAr6oyAtse39Dlu+OWz9u1X/+BhyNa82Bs20Au8KkK77LY6NJUw0gpVGOgeUeWDP31kYELdDTlZpMrdS9eZLBnj/QofFTx7GSeod+vV13cgA6rc0yzjTp25Dm7Xzihf15R5JiNIFzlSYC2TLz+HcJoprxY6Pf6I/1qBjZuoC67eEECQQDjDhEI7s010aXXYQy3xwC/RUDosnfMARqRCpYFCYmoyMiUZ7+ohIvWkkCcwHx7VNKnXfmF0ezdXNT2TCKfXj6hAkEAyNXFKkCPtbg+GFqUlxlfta1s7FJuC1b8ZyaA1ygqUK5PJUoEKR9UcDg0uCKx4Zofpm46WCHx8w8M0+Abss8a1wJAA5JqFDDli44zxLKjJ5T63wdw4PhFyDDQQS3gdE3VG5GlDiifrEABjyuX1p90leAcvENPNJq71jOqqgFCni02YQJAQ8q09SA54lNA0qOwyJhOEFtsCxGAB9/i70a18uqh7f4IxUOIyADFVeQDF6zOcqK90EYg96Ltsuf/on1hnCgAnQJBANGvRflfL1Xvelv2jb446Gnq83IwQ6WJvO8z7/awfMmDsC88MI2bE0xcWJ2QPZZEVJkgCmwOXc26G+z0eei/z/U="; //私钥转换成C#专用私钥 merchant_private_key = testOrderQuery.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrderQuery.HttpHelp.RSASign(signStr, merchant_private_key); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.HttpPost("https://query.vsdpay.com/query/dcard", para); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/is_success"); var merchantcode1 = el.XPathSelectElement("/merchant_code"); var orderno1 = el.XPathSelectElement("/order_no"); var ordertime1 = el.XPathSelectElement("/order_time"); var orderamount1 = el.XPathSelectElement("/order_amount"); var trade_no1 = el.XPathSelectElement("/trade_no"); var card_no1 = el.XPathSelectElement("/card_no"); var card_code1 = el.XPathSelectElement("/card_code"); var pay_date1 = el.XPathSelectElement("/pay_date"); var card_amount1 = el.XPathSelectElement("/trade/card_amount"); var card_actual_amount1 = el.XPathSelectElement("/card_actual_amount"); var dinpaysign1 = el.XPathSelectElement("/sign"); var trade_status1 = el.XPathSelectElement("/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string card_no = Regex.Match(card_no1.ToString(), "(?<=>).*?(?=<)").Value; string card_code = Regex.Match(card_code1.ToString(), "(?<=>).*?(?=<)").Value; string pay_date = Regex.Match(pay_date1.ToString(), "(?<=>).*?(?=<)").Value; string card_amount = Regex.Match(card_amount1.ToString(), "(?<=>).*?(?=<)").Value; string card_actual_amount = Regex.Match(card_actual_amount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string dinpaysign = Regex.Match(dinpaysign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "card_actual_amount=" + card_actual_amount + "&card_amount=" + card_amount + "&card_code=" + card_code + "&card_no=" + card_no + "&merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&pay_date=" + pay_date + "&trade_no=" + trade_no + "&trade_status=" + trade_status; //使用康付通公钥对数据验签 string dinpay_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTE8YBexrEmn8oEqsASVgkZEUo/WTqKZlmr0MYDyIVgcNfvXJPUR9kD46RAT11UYKK681UI0IWcfi/uB+bL00bVzuW7x5YdT5zdDuca/i3H3MIbWMcAHXAqPQt38Z0yWoXoCJp0IZ975vBVSe/a70M7uh1aLSapQFKyUCO2i3hGwIDAQAB"; //将康付通公钥转换成C#专用格式 dinpay_public_key = testOrderQuery.HttpHelp.RSAPublicKeyJava2DotNet(dinpay_public_key); //验签 bool validateResult = testOrderQuery.HttpHelp.ValidateRsaSign(signsrc, dinpay_public_key, dinpaysign); if (validateResult == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/108008008666.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.HttpPost("https://query.vsdpay.com/query/dcard", para); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/is_success"); var merchantcode1 = el.XPathSelectElement("/merchant_code"); var orderno1 = el.XPathSelectElement("/order_no"); var ordertime1 = el.XPathSelectElement("/order_time"); var orderamount1 = el.XPathSelectElement("/order_amount"); var trade_no1 = el.XPathSelectElement("/trade_no"); var card_no1 = el.XPathSelectElement("/card_no"); var card_code1 = el.XPathSelectElement("/card_code"); var pay_date1 = el.XPathSelectElement("/pay_date"); var card_amount1 = el.XPathSelectElement("/trade/card_amount"); var card_actual_amount1 = el.XPathSelectElement("/card_actual_amount"); var dinpaysign1 = el.XPathSelectElement("/sign"); var trade_status1 = el.XPathSelectElement("/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string card_no = Regex.Match(card_no1.ToString(), "(?<=>).*?(?=<)").Value; string card_code = Regex.Match(card_code1.ToString(), "(?<=>).*?(?=<)").Value; string pay_date = Regex.Match(pay_date1.ToString(), "(?<=>).*?(?=<)").Value; string card_amount = Regex.Match(card_amount1.ToString(), "(?<=>).*?(?=<)").Value; string card_actual_amount = Regex.Match(card_actual_amount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string dinpaysign = Regex.Match(dinpaysign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "card_actual_amount=" + card_actual_amount + "&card_amount=" + card_amount + "&card_code=" + card_code + "&card_no=" + card_no + "&merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&pay_date=" + pay_date + "&trade_no=" + trade_no + "&trade_status=" + trade_status; //验签 bool result = rsaWithH.VerifySign("108008008666", signsrc, dinpaysign); if (result == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } } finally { } }
protected void Page_Load(object sender, EventArgs e) { try { /////////////////////////////////接收表单提交参数////////////////////////////////////// ////////////////////////To receive the parameter form HTML form////////////////////// string merchant_code = Request.Form["merchant_code"].ToString().Trim(); string service_type = Request.Form["service_type"].ToString().Trim(); string sign_type = Request.Form["sign_type"].ToString().Trim(); string interface_version = Request.Form["interface_version"].ToString().Trim(); string order_no = Request.Form["order_no"].ToString().Trim(); ///////////////////////////// 数据签名 ///////////////////////////////// //////////////////////////// Data signature //////////////////////////// string signStr = "interface_version=" + interface_version + "&merchant_code=" + merchant_code + "&order_no=" + order_no + "&service_type=" + service_type; if (sign_type == "RSA-S") //RSA-S签名方法 { //商家私钥 string merchant_private_key = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALf/+xHa1fDTCsLYPJLHy80aWq3djuV1T34sEsjp7UpLmV9zmOVMYXsoFNKQIcEzei4QdaqnVknzmIl7n1oXmAgHaSUF3qHjCttscDZcTWyrbXKSNr8arHv8hGJrfNB/Ea/+oSTIY7H5cAtWg6VmoPCHvqjafW8/UP60PdqYewrtAgMBAAECgYEAofXhsyK0RKoPg9jA4NabLuuuu/IU8ScklMQIuO8oHsiStXFUOSnVeImcYofaHmzIdDmqyU9IZgnUz9eQOcYg3BotUdUPcGgoqAqDVtmftqjmldP6F6urFpXBazqBrrfJVIgLyNw4PGK6/EmdQxBEtqqgXppRv/ZVZzZPkwObEuECQQDenAam9eAuJYveHtAthkusutsVG5E3gJiXhRhoAqiSQC9mXLTgaWV7zJyA5zYPMvh6IviX/7H+Bqp14lT9wctFAkEA05ljSYShWTCFThtJxJ2d8zq6xCjBgETAdhiH85O/VrdKpwITV/6psByUKp42IdqMJwOaBgnnct8iDK/TAJLniQJABdo+RodyVGRCUB2pRXkhZjInbl+iKr5jxKAIKzveqLGtTViknL3IoD+Z4b2yayXg6H0g4gYj7NTKCH1h1KYSrQJBALbgbcg/YbeU0NF1kibk1ns9+ebJFpvGT9SBVRZ2TjsjBNkcWR2HEp8LxB6lSEGwActCOJ8Zdjh4kpQGbcWkMYkCQAXBTFiyyImO+sfCccVuDSsWS+9jrc5KadHGIvhfoRjIj2VuUKzJ+mXbmXuXnOYmsAefjnMCI6gGtaqkzl527tw="; //私钥转换成C#专用私钥 merchant_private_key = testOrderQuery.HttpHelp.RSAPrivateKeyJava2DotNet(merchant_private_key); //签名 string signData = testOrderQuery.HttpHelp.RSASign(signStr, merchant_private_key); //将signData进行UrlEncode编码 signData = HttpUtility.UrlEncode(signData); //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.HttpPost("https://query.yuanruic.com/query/dcard", para); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/is_success"); var merchantcode1 = el.XPathSelectElement("/merchant_code"); var orderno1 = el.XPathSelectElement("/order_no"); var ordertime1 = el.XPathSelectElement("/order_time"); var orderamount1 = el.XPathSelectElement("/order_amount"); var trade_no1 = el.XPathSelectElement("/trade_no"); var card_no1 = el.XPathSelectElement("/card_no"); var card_code1 = el.XPathSelectElement("/card_code"); var pay_date1 = el.XPathSelectElement("/pay_date"); var card_amount1 = el.XPathSelectElement("/trade/card_amount"); var card_actual_amount1 = el.XPathSelectElement("/card_actual_amount"); var dinpaysign1 = el.XPathSelectElement("/sign"); var trade_status1 = el.XPathSelectElement("/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string card_no = Regex.Match(card_no1.ToString(), "(?<=>).*?(?=<)").Value; string card_code = Regex.Match(card_code1.ToString(), "(?<=>).*?(?=<)").Value; string pay_date = Regex.Match(pay_date1.ToString(), "(?<=>).*?(?=<)").Value; string card_amount = Regex.Match(card_amount1.ToString(), "(?<=>).*?(?=<)").Value; string card_actual_amount = Regex.Match(card_actual_amount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string dinpaysign = Regex.Match(dinpaysign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "card_actual_amount=" + card_actual_amount + "&card_amount=" + card_amount + "&card_code=" + card_code + "&card_no=" + card_no + "&merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&pay_date=" + pay_date + "&trade_no=" + trade_no + "&trade_status=" + trade_status; //使用公钥对数据验签 string dinpay_public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCBxRoYbPf95kv1l4av8Ggc/adZp22GVjZ+Al1UBUM2nxqaluPfQ8gnjcGNNEOAA+iWDkjrh9PVKgXSCRel3VbDiDtz0vrMRmhQ0W5CsBATBFrAlG4oh13FB4wTEP3qd1HST5nEdTBhdp06y8M16A59N5UY+s3oTwkF5KIJjuGdnQIDAQAB"; //将公钥转换成C#专用格式 dinpay_public_key = testOrderQuery.HttpHelp.RSAPublicKeyJava2DotNet(dinpay_public_key); //验签 bool validateResult = testOrderQuery.HttpHelp.ValidateRsaSign(signsrc, dinpay_public_key, dinpaysign); if (validateResult == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } else //RSA签名方法 { RSAWithHardware rsa = new RSAWithHardware(); string merPubKeyDir = "D:/200001001888.pfx"; //证书路径 string password = "******"; //证书密码 RSAWithHardware rsaWithH = new RSAWithHardware(); rsaWithH.Init(merPubKeyDir, password, "D:/dinpayRSAKeyVersion"); string signData = rsaWithH.Sign(signStr); //签名 signData = HttpUtility.UrlEncode(signData); //将signData进行UrlEncode编码 //组装字符串 string para = signStr + "&sign_type=" + sign_type + "&sign=" + signData; //用HttpPost方式提交 string _xml = HttpHelp.HttpPost("https://query.yuanruic.com/query/dcard", para); //将返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(_xml)); //提取参数 var is_success1 = el.XPathSelectElement("/is_success"); var merchantcode1 = el.XPathSelectElement("/merchant_code"); var orderno1 = el.XPathSelectElement("/order_no"); var ordertime1 = el.XPathSelectElement("/order_time"); var orderamount1 = el.XPathSelectElement("/order_amount"); var trade_no1 = el.XPathSelectElement("/trade_no"); var card_no1 = el.XPathSelectElement("/card_no"); var card_code1 = el.XPathSelectElement("/card_code"); var pay_date1 = el.XPathSelectElement("/pay_date"); var card_amount1 = el.XPathSelectElement("/trade/card_amount"); var card_actual_amount1 = el.XPathSelectElement("/card_actual_amount"); var dinpaysign1 = el.XPathSelectElement("/sign"); var trade_status1 = el.XPathSelectElement("/trade_status"); //去掉首尾的标签并转换成string string is_success = Regex.Match(is_success1.ToString(), "(?<=>).*?(?=<)").Value; //不参与验签 if (is_success == "F") { Response.Write("查询失败:" + _xml + "<br/>"); Response.End(); } string merchantcode = Regex.Match(merchantcode1.ToString(), "(?<=>).*?(?=<)").Value; string orderno = Regex.Match(orderno1.ToString(), "(?<=>).*?(?=<)").Value; string ordertime = Regex.Match(ordertime1.ToString(), "(?<=>).*?(?=<)").Value; string orderamount = Regex.Match(orderamount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_no = Regex.Match(trade_no1.ToString(), "(?<=>).*?(?=<)").Value; string card_no = Regex.Match(card_no1.ToString(), "(?<=>).*?(?=<)").Value; string card_code = Regex.Match(card_code1.ToString(), "(?<=>).*?(?=<)").Value; string pay_date = Regex.Match(pay_date1.ToString(), "(?<=>).*?(?=<)").Value; string card_amount = Regex.Match(card_amount1.ToString(), "(?<=>).*?(?=<)").Value; string card_actual_amount = Regex.Match(card_actual_amount1.ToString(), "(?<=>).*?(?=<)").Value; string trade_status = Regex.Match(trade_status1.ToString(), "(?<=>).*?(?=<)").Value; string dinpaysign = Regex.Match(dinpaysign1.ToString(), "(?<=>).*?(?=<)").Value; //组装字符串 string signsrc = "card_actual_amount=" + card_actual_amount + "&card_amount=" + card_amount + "&card_code=" + card_code + "&card_no=" + card_no + "&merchant_code=" + merchantcode + "&order_amount=" + orderamount + "&order_no=" + orderno + "&order_time=" + ordertime + "&pay_date=" + pay_date + "&trade_no=" + trade_no + "&trade_status=" + trade_status; //验签 bool result = rsaWithH.VerifySign("200001001888", signsrc, dinpaysign); if (result == false) { Response.Write("验签失败"); Response.End(); } Response.Write("验签成功"); } } finally { } }