转载C#下RSA算法的实现(适用于支付宝和易宝支付)
RSA算法代码:
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Security.Cryptography;namespace RSA.Class {/// <summary>/// 类名:RSAFromPkcs8/// 功能:RSA加密、解密、签名、验签/// 详细:该类对Java生成的密钥进行解密和签名以及验签专用类,不需要修改/// 版本:3.0/// 日期:2013-07-08/// 说明:/// 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。/// </summary>public sealed class RSAFromPkcs8{/// <summary>/// 签名/// </summary>/// <param name="content">待签名字符串</param>/// <param name="privateKey">私钥</param>/// <param name="input_charset">编码格式</param>/// <returns>签名后字符串</returns>public static string sign(string content, string privateKey, string input_charset){byte[] Data = Encoding.GetEncoding(input_charset).GetBytes(content);RSACryptoServiceProvider rsa = DecodePemPrivateKey(privateKey);SHA1 sh = new SHA1CryptoServiceProvider();byte[] signData = rsa.SignData(Data, sh);return Convert.ToBase64String(signData);}/// <summary>/// 验签/// </summary>/// <param name="content">待验签字符串</param>/// <param name="signedString">签名</param>/// <param name="publicKey">公钥</param>/// <param name="input_charset">编码格式</param>/// <returns>true(通过),false(不通过)</returns>public static bool verify(string content, string signedString, string publicKey, string input_charset){bool result = false;byte[] Data = Encoding.GetEncoding(input_charset).GetBytes(content);byte[] data = Convert.FromBase64String(signedString);RSAParameters paraPub = ConvertFromPublicKey(publicKey);RSACryptoServiceProvider rsaPub = new RSACryptoServiceProvider();rsaPub.ImportParameters(paraPub);SHA1 sh = new SHA1CryptoServiceProvider();result = rsaPub.VerifyData(Data, sh, data);return result;}/// <summary>/// 加密/// </summary>/// <param name="resData">需要加密的字符串</param>/// <param name="publicKey">公钥</param>/// <param name="input_charset">编码格式</param>/// <returns>明文</returns>public static string encryptData(string resData, string publicKey, string input_charset){byte[] DataToEncrypt = Encoding.ASCII.GetBytes(resData);string result = encrypt(DataToEncrypt, publicKey, input_charset);return result;}/// <summary>/// 解密/// </summary>/// <param name="resData">加密字符串</param>/// <param name="privateKey">私钥</param>/// <param name="input_charset">编码格式</param>/// <returns>明文</returns>public static string decryptData(string resData, string privateKey, string input_charset){byte[] DataToDecrypt = Convert.FromBase64String(resData);string result = "";for (int j = 0; j < DataToDecrypt.Length / 128; j++){byte[] buf = new byte[128];for (int i = 0; i < 128; i++){buf[i] = DataToDecrypt[i + 128 * j];}result += decrypt(buf, privateKey, input_charset);}return result;}#region 内部方法private static string encrypt(byte[] data, string publicKey, string input_charset){RSACryptoServiceProvider rsa = DecodePemPublicKey(publicKey);SHA1 sh = new SHA1CryptoServiceProvider();byte[] result = rsa.Encrypt(data, false);return Convert.ToBase64String(result);}private static string decrypt(byte[] data, string privateKey, string input_charset){string result = "";RSACryptoServiceProvider rsa = DecodePemPrivateKey(privateKey);SHA1 sh = new SHA1CryptoServiceProvider();byte[] source = rsa.Decrypt(data, false);char[] asciiChars = new char[Encoding.GetEncoding(input_charset).GetCharCount(source, 0, source.Length)];Encoding.GetEncoding(input_charset).GetChars(source, 0, source.Length, asciiChars, 0);result = new string(asciiChars);//result = ASCIIEncoding.ASCII.GetString(source);return result;}private static RSACryptoServiceProvider DecodePemPublicKey(String pemstr){byte[] pkcs8publickkey;pkcs8publickkey = Convert.FromBase64String(pemstr);if (pkcs8publickkey != null){RSACryptoServiceProvider rsa = DecodeRSAPublicKey(pkcs8publickkey);return rsa;}elsereturn null;}private static RSACryptoServiceProvider DecodePemPrivateKey(String pemstr){byte[] pkcs8privatekey;pkcs8privatekey = Convert.FromBase64String(pemstr);if (pkcs8privatekey != null){RSACryptoServiceProvider rsa = DecodePrivateKeyInfo(pkcs8privatekey);return rsa;}elsereturn null;}private static RSACryptoServiceProvider DecodePrivateKeyInfo(byte[] pkcs8){byte[] SeqOID = { 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00 };byte[] seq = new byte[15];MemoryStream mem = new MemoryStream(pkcs8);int lenstream = (int)mem.Length;BinaryReader binr = new BinaryReader(mem); //wrap Memory Stream with BinaryReader for easy readingbyte bt = 0;ushort twobytes = 0;try{twobytes = binr.ReadUInt16();if (twobytes == 0x8130) //data read as little endian order (actual data order for Sequence is 30 81)binr.ReadByte(); //advance 1 byteelse if (twobytes == 0x8230)binr.ReadInt16(); //advance 2 byteselsereturn null;bt = binr.ReadByte();if (bt != 0x02)return null;twobytes = binr.ReadUInt16();if (twobytes != 0x0001)return null;seq = binr.ReadBytes(15); //read the Sequence OIDif (!CompareBytearrays(seq, SeqOID)) //make sure Sequence for OID is correctreturn null;bt = binr.ReadByte();if (bt != 0x04) //expect an Octet stringreturn null;bt = binr.ReadByte(); //read next byte, or next 2 bytes is 0x81 or 0x82; otherwise bt is the byte countif (bt == 0x81)binr.ReadByte();elseif (bt == 0x82)binr.ReadUInt16();//------ at this stage, the remaining sequence should be the RSA private keybyte[] rsaprivkey = binr.ReadBytes((int)(lenstream - mem.Position));RSACryptoServiceProvider rsacsp = DecodeRSAPrivateKey(rsaprivkey);return rsacsp;}catch (Exception){return null;}finally { binr.Close(); }}private static bool CompareBytearrays(byte[] a, byte[] b){if (a.Length != b.Length)return false;int i = 0;foreach (byte c in a){if (c != b[i])return false;i++;}return true;}private static RSACryptoServiceProvider DecodeRSAPublicKey(byte[] publickey){// encoded OID sequence for PKCS #1 rsaEncryption szOID_RSA_RSA = "1.2.840.113549.1.1.1"byte[] SeqOID = { 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00 };byte[] seq = new byte[15];// --------- Set up stream to read the asn.1 encoded SubjectPublicKeyInfo blob ------MemoryStream mem = new MemoryStream(publickey);BinaryReader binr = new BinaryReader(mem); //wrap Memory Stream with BinaryReader for easy readingbyte bt = 0;ushort twobytes = 0;try{twobytes = binr.ReadUInt16();if (twobytes == 0x8130) //data read as little endian order (actual data order for Sequence is 30 81)binr.ReadByte(); //advance 1 byteelse if (twobytes == 0x8230)binr.ReadInt16(); //advance 2 byteselsereturn null;seq = binr.ReadBytes(15); //read the Sequence OIDif (!CompareBytearrays(seq, SeqOID)) //make sure Sequence for OID is correctreturn null;twobytes = binr.ReadUInt16();if (twobytes == 0x8103) //data read as little endian order (actual data order for Bit String is 03 81)binr.ReadByte(); //advance 1 byteelse if (twobytes == 0x8203)binr.ReadInt16(); //advance 2 byteselsereturn null;bt = binr.ReadByte();if (bt != 0x00) //expect null byte nextreturn null;twobytes = binr.ReadUInt16();if (twobytes == 0x8130) //data read as little endian order (actual data order for Sequence is 30 81)binr.ReadByte(); //advance 1 byteelse if (twobytes == 0x8230)binr.ReadInt16(); //advance 2 byteselsereturn null;twobytes = binr.ReadUInt16();byte lowbyte = 0x00;byte highbyte = 0x00;if (twobytes == 0x8102) //data read as little endian order (actual data order for Integer is 02 81)lowbyte = binr.ReadByte(); // read next bytes which is bytes in moduluselse if (twobytes == 0x8202){highbyte = binr.ReadByte(); //advance 2 byteslowbyte = binr.ReadByte();}elsereturn null;byte[] modint = { lowbyte, highbyte, 0x00, 0x00 }; //reverse byte order since asn.1 key uses big endian orderint modsize = BitConverter.ToInt32(modint, 0);byte firstbyte = binr.ReadByte();binr.BaseStream.Seek(-1, SeekOrigin.Current);if (firstbyte == 0x00){ //if first byte (highest order) of modulus is zero, don't include itbinr.ReadByte(); //skip this null bytemodsize -= 1; //reduce modulus buffer size by 1 }byte[] modulus = binr.ReadBytes(modsize); //read the modulus bytesif (binr.ReadByte() != 0x02) //expect an Integer for the exponent datareturn null;int expbytes = (int)binr.ReadByte(); // should only need one byte for actual exponent data (for all useful values)byte[] exponent = binr.ReadBytes(expbytes);// ------- create RSACryptoServiceProvider instance and initialize with public key -----RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();RSAParameters RSAKeyInfo = new RSAParameters();RSAKeyInfo.Modulus = modulus;RSAKeyInfo.Exponent = exponent;RSA.ImportParameters(RSAKeyInfo);return RSA;}catch (Exception){return null;}finally { binr.Close(); }}private static RSACryptoServiceProvider DecodeRSAPrivateKey(byte[] privkey){byte[] MODULUS, E, D, P, Q, DP, DQ, IQ;// --------- Set up stream to decode the asn.1 encoded RSA private key ------MemoryStream mem = new MemoryStream(privkey);BinaryReader binr = new BinaryReader(mem); //wrap Memory Stream with BinaryReader for easy readingbyte bt = 0;ushort twobytes = 0;int elems = 0;try{twobytes = binr.ReadUInt16();if (twobytes == 0x8130) //data read as little endian order (actual data order for Sequence is 30 81)binr.ReadByte(); //advance 1 byteelse if (twobytes == 0x8230)binr.ReadInt16(); //advance 2 byteselsereturn null;twobytes = binr.ReadUInt16();if (twobytes != 0x0102) //version numberreturn null;bt = binr.ReadByte();if (bt != 0x00)return null;//------ all private key components are Integer sequences ----elems = GetIntegerSize(binr);MODULUS = binr.ReadBytes(elems);elems = GetIntegerSize(binr);E = binr.ReadBytes(elems);elems = GetIntegerSize(binr);D = binr.ReadBytes(elems);elems = GetIntegerSize(binr);P = binr.ReadBytes(elems);elems = GetIntegerSize(binr);Q = binr.ReadBytes(elems);elems = GetIntegerSize(binr);DP = binr.ReadBytes(elems);elems = GetIntegerSize(binr);DQ = binr.ReadBytes(elems);elems = GetIntegerSize(binr);IQ = binr.ReadBytes(elems);// ------- create RSACryptoServiceProvider instance and initialize with public key -----RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();RSAParameters RSAparams = new RSAParameters();RSAparams.Modulus = MODULUS;RSAparams.Exponent = E;RSAparams.D = D;RSAparams.P = P;RSAparams.Q = Q;RSAparams.DP = DP;RSAparams.DQ = DQ;RSAparams.InverseQ = IQ;RSA.ImportParameters(RSAparams);return RSA;}catch (Exception){return null;}finally { binr.Close(); }}private static int GetIntegerSize(BinaryReader binr){byte bt = 0;byte lowbyte = 0x00;byte highbyte = 0x00;int count = 0;bt = binr.ReadByte();if (bt != 0x02) //expect integerreturn 0;bt = binr.ReadByte();if (bt == 0x81)count = binr.ReadByte(); // data size in next byteelseif (bt == 0x82){highbyte = binr.ReadByte(); // data size in next 2 byteslowbyte = binr.ReadByte();byte[] modint = { lowbyte, highbyte, 0x00, 0x00 };count = BitConverter.ToInt32(modint, 0);}else{count = bt; // we already have the data size }while (binr.ReadByte() == 0x00){ //remove high order zeros in datacount -= 1;}binr.BaseStream.Seek(-1, SeekOrigin.Current); //last ReadByte wasn't a removed zero, so back up a bytereturn count;}#endregion#region 解析.net 生成的Pemprivate static RSAParameters ConvertFromPublicKey(string pemFileConent){byte[] keyData = Convert.FromBase64String(pemFileConent);if (keyData.Length < 162){throw new ArgumentException("pem file content is incorrect.");}byte[] pemModulus = new byte[128];byte[] pemPublicExponent = new byte[3];Array.Copy(keyData, 29, pemModulus, 0, 128);Array.Copy(keyData, 159, pemPublicExponent, 0, 3);RSAParameters para = new RSAParameters();para.Modulus = pemModulus;para.Exponent = pemPublicExponent;return para;}private static RSAParameters ConvertFromPrivateKey(string pemFileConent){byte[] keyData = Convert.FromBase64String(pemFileConent);if (keyData.Length < 609){throw new ArgumentException("pem file content is incorrect.");}int index = 11;byte[] pemModulus = new byte[128];Array.Copy(keyData, index, pemModulus, 0, 128);index += 128;index += 2;//141byte[] pemPublicExponent = new byte[3];Array.Copy(keyData, index, pemPublicExponent, 0, 3);index += 3;index += 4;//148byte[] pemPrivateExponent = new byte[128];Array.Copy(keyData, index, pemPrivateExponent, 0, 128);index += 128;index += ((int)keyData[index + 1] == 64 ? 2 : 3);//279byte[] pemPrime1 = new byte[64];Array.Copy(keyData, index, pemPrime1, 0, 64);index += 64;index += ((int)keyData[index + 1] == 64 ? 2 : 3);//346byte[] pemPrime2 = new byte[64];Array.Copy(keyData, index, pemPrime2, 0, 64);index += 64;index += ((int)keyData[index + 1] == 64 ? 2 : 3);//412/413byte[] pemExponent1 = new byte[64];Array.Copy(keyData, index, pemExponent1, 0, 64);index += 64;index += ((int)keyData[index + 1] == 64 ? 2 : 3);//479/480byte[] pemExponent2 = new byte[64];Array.Copy(keyData, index, pemExponent2, 0, 64);index += 64;index += ((int)keyData[index + 1] == 64 ? 2 : 3);//545/546byte[] pemCoefficient = new byte[64];Array.Copy(keyData, index, pemCoefficient, 0, 64);RSAParameters para = new RSAParameters();para.Modulus = pemModulus;para.Exponent = pemPublicExponent;para.D = pemPrivateExponent;para.P = pemPrime1;para.Q = pemPrime2;para.DP = pemExponent1;para.DQ = pemExponent2;para.InverseQ = pemCoefficient;return para;}#endregion} }
RSA算法测试代码:
using System; using System.Collections.Generic; using System.Text; using RSA.Class;namespace payapi_demo.RSA {class TestRSA{static void Main(string[] arg){/**RSA加密测试,RSA中的密钥对通过SSL工具生成,生成命令如下:* 1 生成RSA私钥:* openssl genrsa -out rsa_private_key.pem 1024*2 生成RSA公钥* openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem** 3 将RSA私钥转换成PKCS8格式* openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_pub_pk8.pem** 直接打开rsa_private_key.pem和rsa_pub_pk8.pem文件就可以获取密钥对内容,获取密钥对内容组成字符串时,注意将换行符删除* */string publickey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDzOqfNunFxFtCZPlq7fO/jWwjqmTvAooVBB4y87BizSZ9dl/F7FpAxYc6MmX2TqivCvvORXgdlYdFWAhzXOnIUv9OGG///WPLe9TMs9kIwAZ/APUXauvC01oFLnYkzwPlAh0tQ1Au9arTE/OG1V1dKgf8BXHLPhKL4BmGBEUZBtQIDAQAB";string privatekey = "MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBAPM6p826cXEW0Jk+Wrt87+NbCOqZO8CihUEHjLzsGLNJn12X8XsWkDFhzoyZfZOqK8K+85FeB2Vh0VYCHNc6chS/04Yb//9Y8t71Myz2QjABn8A9Rdq68LTWgUudiTPA+UCHS1DUC71qtMT84bVXV0qB/wFccs+EovgGYYERRkG1AgMBAAECgYEA2PmnPdgnYKnolfvQ9tXiLaBFGPpvGk4grz0r6FB5TF7N4rErwxECunq0xioaowK4HPc40qHd2SvkkWQ7FCjYIDsnMk1oOhxNKn0J3FG0n5Cg1/dFai4eoXHs/nKn3SVZ8YZC1T2cMtN2srectLqNqhB8aQEe8xmykyUlUpg/qmECQQD9vkwjUotG5oUUrOj6etcB4WcdyyH0FtThKgyoJUDwgBv6lGGzWyFJEREvp47IgV+FgC7zeP2mL4MhgnD3tNCZAkEA9WRrjOLBNc379XZpoDsH7rZjobVvhnTrEuRDx/whqZ+vk64EPrEW81XYh647bAbJlFn2jPhY+IUHkrxFEFT/fQJBAMoLNOULXQtfkqgb5odMONeue0Ul8itB4tBHgzyALW1TFPQ6InGGJsLfbCfd67uMCFts7fXAaXhibK/KBdm3iEECQQChwVAjzlUN4nnzk9qMhFz2PcPvFGovd2J9UXpcmRaXeWuDLXIe4Rz/ydaxmWgSDWdTIvoicpIzP31+fBwKZ/0BAkEAy0bh4weKmYF29//rK0sxmY8RtqkQeFrwWbqx1daa1w0DfWlNSvy47zyW1G5/AdZU6JSpXxlxdlM/HSDw+v7kcA==";//加密字符串string data = "yibao";Console.WriteLine("加密前字符串内容:"+data);//加密string encrypteddata = RSAFromPkcs8.encryptData(data, publickey, "UTF-8");Console.WriteLine("加密后的字符串为:" + encrypteddata);Console.WriteLine("解密后的字符串内容:" + RSAFromPkcs8.decryptData(encrypteddata, privatekey, "UTF-8"));Console.WriteLine("***********");//解密string endata = "LpnnvnfA72VnyjboX/OsCPO6FOFXeEnnsKkI7aAEQyVAPfCTfQ43ZYVZVqnADDPMW7VhBXJWyQMAGw2Fh9sS/XLHmO5XW94Yehci6JrJMynePgtIiDysjNA+UlgSTC/MlResNrBm/4MMSPvq0qLwScgpZDynhLsVZk+EQ6G8wgA=";string datamw = RSAFromPkcs8.decryptData(endata, privatekey, "UTF-8");Console.WriteLine("静态加密后的字符串为:" + endata);Console.WriteLine("解密后的字符串内容:" + datamw);//签名string signdata = "YB010000001441234567286038508081299";Console.WriteLine("签名前的字符串内容:" + signdata);string sign = RSAFromPkcs8.sign(signdata, privatekey, "UTF-8");Console.WriteLine("签名后的字符串:" + sign);Console.ReadLine();}} }
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 支付宝支付开发流程
支付宝开发流程1、首先我们先谈谈第三方支付所谓第三方支付就是和一些各大银行签约,并具备一定实力和信誉保障的第三方独立机构提供的交易平台目前市面上常见的有支付宝,财付通,网银,易宝支付等,网站需要实现第三方支付首先应向第三方申请一个账号并签署协议,协议生效后第…...
2024/5/5 4:57:56 - java web实现第三方在线支付
java web在线支付下面我们先来了解一下在线支付的方式及其各自的优缺点在线支付:和银行对接和第三方支付对接银行对接 优点:免费,无需支付任何费用缺点:接口参数较多,开发成本及维护成本高第三方支付 优点:第三方提供接口,开发成本及维护成本低缺点:需要支付一定的费用此…...
2024/4/20 23:19:21 - 支付宝第三方在线支付接口详解
当我们在商城购物时,可能会用到在线支付,你会发现无论你是哪个银行的银行卡接口中都会支持,在做项目开发时,也经常会用到支付接口,我们当然希望支持所有的网银,但这需要我们针对每个银行开发一套接口吗?不是不可以而是没必要,使用第三方的支付接口就可以满足,第三方支…...
2024/4/20 23:19:19 - 第三方支付接口搜集(附下载)
第三方支付接口 1. 快钱支付 2. 支付宝 3. YeePay易宝 4. 邮局支付(网汇通) 5. 安付通 6. 网银(chinabank) 7. PayPal贝宝 8. ips环迅支付 9. 腾讯财付通 10. NPS网上支付系统1.快钱支付(银行/邮政汇) (https://www…...
2024/4/20 23:19:18 - 支付宝、财付通、网银、百度钱包、京东钱包接口费率
在集成支付功能时,遇到了付款方式接口选择的问题,于是对支付宝,财付通,PayPal,网银在线,快钱有了具体的认识,并分享出来。支付渠道费用(2016)渠道名称 接入费 交易手续费 申请时间 资金到帐时间 Apple Pay 免费 实物类:0.7%每笔 3C/数码/数娱:1.2%每笔 7-15工作日 …...
2024/4/20 13:23:00 - MD5加密及第三方支付接口的技术比较
摘 要:第三方支付市场的发展前景乐观,但同时市场竞争也越来越激烈。随着第三方支付业务许可牌照的发放,第三方支付将很可能打破大型银行垄断电子金融的局面。本文将主要研究第三方支付的“网上支付接口”,比较分析各种不同的第三方支付接口的差异性。 关键词:电子支付 第…...
2024/4/20 9:50:48 - 四大免费magento支付接口扩展
安装key方法, 支付宝接口, 易宝支付, 收汇宝接口, 快钱接口 安装key方法: 1.登入网站管理后台 2.选择菜单System(系统)->MagentoConnect->Magento Connect Manager 3.Log In ,填入需要安装的key,点击install自动安装完成。 1.Alipay Payment Gateway(支付宝接口) 官方…...
2024/4/20 23:19:16 - PHP支付宝支付开发流程
支付宝开发流程1、首先我们先谈谈第三方支付 所谓第三方支付就是和一些各大银行签约,并具备一定实力和信誉保障的第三方独立机构提供的交易平台 目前市面上常见的有支付宝,财付通,网银,易宝支付等,网站需要实现第三方支付首先应向第三方申请一个账号并签署协议,协议生效后…...
2024/4/20 21:22:05 - 网上商城系统支付方式如何配置?支付方式有哪些
众所周知,网购平台中的会员支付、商家收款绝大部分是通过第三方支付平台(微信、支付宝、银联...)进行交易,而一款网上商城系统中集成的支付接口也是多样化的,如:支付宝(电脑网站)、支付宝(手机网站)、微信支付(扫码支付)、微信支付(公众号支付)、微信支付(H5支付)、微信支付…...
2024/4/20 21:22:03 - 第四方支付崛起,聚合支付为什么这么火?
“第四方聚合支付服务”不具备支付牌照,而是通过聚合多种第三方支付平台、合作银行及其他服务商接口等支付工具的综合支付服务。它不进行资金清算,但能够根据商户的需求进行个性化定制,形成支付通道资源优势互补,具有中立性、灵活性、便捷性等特点。简而言之,第三方支付提…...
2024/4/20 21:22:02 - 易宝网上支付平台的PHP接口代码
本代码参照自韩顺平149讲视频后5讲,需要学习的朋友可以参考本代码 这是测试图片:以下是代码部分:1 <?php2 3 4 function HmacMd5($data, $key)5 {6 7 //需要配置环境支撑iconv,否则中文参数不能正常处理8 $key = iconv("GB2312", "UTF-8&qu…...
2024/4/20 21:22:01 - 我们完成了易宝Magento支付接口的开发
我们完成了易宝Magento支付接口的开发 如果需要可以联系我们sales@magentoecommerce.cn.咨询电话:13816799389 韩先生 (Eric),021-62485160 格莱汉姆信息技术有限公司....
2024/4/20 23:19:14 - 在线支付接口详解
当我们在商城购物时,可能会用到在线支付,你会发现无论你是哪个银行的银行卡接口中都会支持,在做项目开发时,也经常会用到支付接口,我们当然希望支持所有的网银,但这需要我们针对每个银行开发一套接口吗?不是不可以而是没必要,使用第三方的支付接口就可以满足,第三方支…...
2024/4/20 18:20:22 - android支付
关于在线支付平台,目前国内主要有以下几种 paypal 支付宝,财付通,盛付通,易宝支付,快钱,银联在线,国付宝,网易宝,汇付天下等等。手机支付平台,调研了支付宝,支付宝,财付通,盛付通,paypal,易宝支付,银联在线,google in-app billing。其中盛大的盛付通不支持手机…...
2024/4/20 23:19:12 - 【SSH网上商城项目实战20】在线支付平台的介绍
目录(?)[+]在线支付介绍连接银行的方式1 商城与银行直连2 商城与支付中介与银行易宝支付1 易宝支付介绍2 易宝支付途径 之前已经完成了首页的显示,用户添加购物车,确认订单等功能,下面就是支付功能的开发了。用户确认了订单后会直接跳转到支付页面进行在线支付,在线支…...
2024/4/20 23:19:11 - 网上支付接口
快钱支付接口-asp示例 2008-05-03 12:29send.asp <!--#include file="md5.asp"--><% @Description: 快钱网关接口范例 @Copyright (c) 上海快钱信息服务有限公司 @version 2.0merchant_id = "879905060103109788" 商户编号merchant_key = "…...
2024/5/3 15:13:10 - 网银支付接口资料小总
第三方支付接口1. 快钱支付2. 支付宝3. YeePay易宝4. 邮局支付(网汇通)5. 安付通6. 网银(chinabank)7. PayPal贝宝8. ips环迅支付9. 腾讯财付通10. NPS网上支付系统1.快钱支付(银行/邮政汇) (https://www.99bill.co…...
2024/4/20 23:19:09 - WordPress按钮秒支付插件发布,支持微信支付,支付宝,银联,京东,苏宁,易宝支付...
痛点: 我们用WordPress建设网站和开发移动应用,有时候我们其实不需要太多的流程,只是需要一个收款通道,但是可能对支持的渠道更加关注,特别是手机应用。所以WordPress按钮秒支付插件诞生了,它是一个快速收款工具,只需要在后台填入金额,然后把这个按钮放在任意网站,或者…...
2024/4/20 23:19:08 - 易宝Java版在线支付
整个过程只有两个步骤:发起支付请求和响应支付结果首先是Web.xml[html] viewplaincopyprint?<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:x…...
2024/4/20 23:19:07 - 第三方支付接口示例代码
第三方支付接口1. 快钱支付2. 支付宝3. YeePay易宝4. 邮局支付(网汇通)5. 安付通6. 网银(chinabank)7. PayPal贝宝8. ips环迅支付9. 腾讯财付通10. NPS网上支付系统1.快钱支付(银行/邮政汇) (https://www.99bill.co…...
2024/4/20 23:19:06
最新文章
- 3.11设计模式——Visitor 访问者模式(行为型)
意图 表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下定义作用于这些元素的新操作。 结构 Visitor(访问者)为该对象结构中ConcreteElement(具体元素)的每一个类声明一个Visit操作,该操…...
2024/5/5 5:00:13 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - WPS二次开发专题:如何获取应用签名SHA256值
作者持续关注WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 在申请WPS SDK授权版时候需要开发者提供应用包名和签…...
2024/5/3 15:18:01 - 解决npm install安装node-sass包容易失败的问题
具体问题如下: npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: XXX3.4.0 npm ERR! Found: webpack5.31.2 npm ERR! node_modules/webpack npm ERR! peer webpack”^4.0.0 || ^5.0.0″ from html-…...
2024/5/4 7:13:16 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/4 23:54:56 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/4 23:55:17 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/4 18:20:48 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/4 2:59:34 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/4 23:55:01 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57