public static void InitCertificateValidationCallback()
{
ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate);
}
static bool ValidateServerCertificate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
c#으로 작성된 서버 또는 유니티 등에서 티스토어의 인앱 결제 영수증 검증을 다음과 같이 하면된다.
readonly string TSTORE_RECEIPT_VERIFY_URL_PRODUCT = "https://iap.tstore.co.kr/digitalsignconfirm.iap"; //실서비스용서버주소
readonly string TSTORE_RECEIPT_VERIFY_URL_DEV = "https://iapdev.tstore.co.kr/digitalsignconfirm.iap"; //개발용서버주소
readonly string TSTORE_RECEIPT_VERIFY_FORMAT = "{{\"txid\" : \"{0}\", \"appid\" : \"{1}\", \"signdata\" : \"{2}\"}}";
//TStore 영수증 검중구현,
//bProduct : 서비스/개발용 서버중 어느 서버에서 검증할지
//strAppID : 티스토어에 배포한 프로그램에 할당받은 ID
//strTXID : 인앱 결제후 결과 값으로 넘어온 것중 txid
//strReceipt : 인앱결제 후 결과 값으로 넘어온 영수증 정보
//리턴값이 true인경우 영수증검증에 성공한것이다.
//애플의 영수증을 검증하는 것처럼 먼저 bProduct에 true를 해서 영수증검증을 해보고 만일 실패 하는경우
//false를 줘서 검증을 시도하도록 하면 된다.
bool VerifyTStoreReceipt(bool bProduct, string strAppID, string strTXID, string strReceipt)
{
try
{
// Verify the receipt with Apple
string postString = String.Format(TSTORE_RECEIPT_VERIFY_FORMAT, strTXID, strAppID, strReceipt);
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] postBytes = ascii.GetBytes(postString);
HttpWebRequest request;
if (bProduct)
request = WebRequest.Create(TSTORE_RECEIPT_VERIFY_URL_PRODUCT) as HttpWebRequest;
else
request = WebRequest.Create(TSTORE_RECEIPT_VERIFY_URL_DEV) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = postBytes.Length;
Stream postStream = request.GetRequestStream();
postStream.Write(postBytes, 0, postBytes.Length);
postStream.Close();
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
StringBuilder sb = new StringBuilder();
byte[] buf = new byte[8192];
Stream resStream = response.GetResponseStream();
string tempString = null;
int count = 0;
do
{
count = resStream.Read(buf, 0, buf.Length);
if (count != 0)
{
tempString = Encoding.ASCII.GetString(buf, 0, count);
sb.Append(tempString);
}
} while (count > 0);
var fd = JObject.Parse(sb.ToString());
try
{
resStream.Close();
response.Close();
}
catch
{
}
string strResult = fd["status"].ToString();
string strDetail = fd["detail"].ToString();
// Receipt not valid
if (strResult == null || strResult != "0" || strDetail == null || strDetail != "0000")
{
#if DEBUG
CLogMng.Instance().Debug("tstore purchase failed : " + sb.ToString());
CLogMng.Instance().Debug("txid : " + strTXID);
CLogMng.Instance().Debug("signdata : " + strReceipt);
#endif
return false;
}
}
catch// (Exception ex)
{
// We crashed and burned -- do something intelligent
return false;
}
return true;
}
'안드로이드' 카테고리의 다른 글
이클립스 레이아웃편집시 느릴경우 이클립스 자바 메모리 관련설정하기 (0) | 2014.06.01 |
---|---|
구글 인앱 영수증 검증 c# 버전(google in-app purchase receipt verification) (0) | 2014.05.03 |
프로가드 오류 (0) | 2014.05.02 |
[구글인앱]Testing Your In-app Billing Application(인앱 빌링 애플리케이션 테스트) #5 (0) | 2014.05.02 |
[구글인앱]Purchasing In-app Billing Products(인앱 빌링 제품 구매하기) #4 (0) | 2014.05.02 |