UTF8 decodificación Formulario urlencoded en C #
-
12-10-2019 - |
Pregunta
Editar que había entendido mal lo que estaba ocurriendo aquí .. hay un envío POST, a continuación, recibir de vuelta un resultado, entonces la cadena de URL, que estoy viendo aquí es parte de la cadena de la consulta ... por lo que no puede decodificar lo que esto realmente es, ya que es codificada por el pueblo pasarela de pago y no a mí.
Me gustaría decodificar una cadena URL
Este es el código:
private string SubmitXml(string InputXml)
{
string result = InputXml.ToString();
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(_WebServiceUrl);
webReq.Method = "POST";
byte[] reqBytes;
reqBytes = System.Text.Encoding.UTF8.GetBytes(InputXml);
webReq.ContentType = "application/x-www-form-urlencoded";
webReq.ContentLength = reqBytes.Length;
webReq.Timeout = 5000;
Stream requestStream = webReq.GetRequestStream();
requestStream.Write(reqBytes, 0, reqBytes.Length);
requestStream.Close();
HttpWebResponse webResponse = (HttpWebResponse)webReq.GetResponse();
Esta es la InputXml:
- <GenerateRequest>
<PxPayUserId>KoruCareCHCH_Dev</PxPayUserId>
<PxPayKey>47d99ccdcae54816ecd78c9a80f8878c466a7ed829480e59d421cc4c456cbd93</PxPayKey>
<AmountInput>345.00</AmountInput>
<BillingId />
<CurrencyInput>NZD</CurrencyInput>
<DpsBillingId />
<DpsTxnRef />
<EmailAddress />
<EnableAddBillCard />
<MerchantReference>43</MerchantReference>
<TxnData1 />
<TxnData2 />
<TxnData3 />
<TxnType>Purchase</TxnType>
<TxnId>43</TxnId>
<UrlFail>http://localhost:1527/Auction/PurchaseTickets.aspx</UrlFail>
<UrlSuccess>http://localhost:1527/Auction/PurchaseTickets.aspx</UrlSuccess>
<Opt />
</GenerateRequest>
Aquí está la URL
Problema: ¿Cómo decodificar la solicitud de URL = volver blahblah en XML
Estoy haciendo esto para tratar de demostrar lo que está contenido en la cadena de URL (debe ser igual que el XML anterior!)
Solución
no tenía ninguna suerte decodificación por lo que la URL puede estar equivocado, pero se usa este código:
Uri uri = new Uri(...);
NameValueCollection query = HttpUtility.ParseQueryString(uri.Query);
string value = query["request"].Replace('-', '+').Replace('_', '/');
Debug.WriteLine(Convert.FromBase64String(value));
EDIT:. En sus documentos dicen que es encriptada
Otros consejos
Se puede usar una expresión regular, algo así como
var match = new Regex("request=(?<key>[^&]+)").Match(url);
y capturar el valor de petición en el grupo nombrado. A partir de ahí, es de esperar que sería capaz de descifrar el valor capturado.
No hay garantías de que la expresión regular anterior es correcta - no he probado. Se debe por lo menos le apuntan en la dirección correcta!