PayUMoney payment gateway issue
Solution 1
I found answer successfully. My working code is listed below
int i = arc4random() % 9999999999;
NSString *strHash = [self createSHA512:[NSString stringWithFormat:@"%d%@",i,[NSDate date]]];// Generatehash512(rnd.ToString() + DateTime.Now);
NSString *txnid1 = [strHash substringToIndex:20];
NSLog(@"tnx1 id %@",txnid1);
NSString *key = @"JBZaLc";
NSString *amount = @"1000";
NSString *productInfo = @"Nice product";
NSString *firstname = @"Mani";
NSString *email = @"[email protected]";
NSString *phone = @"1234566";
NSString *surl = @"www.google.com";
NSString *furl = @"www.google.com";
NSString *serviceprovider = @"payu_paisa";
NSString *hashValue = [NSString stringWithFormat:@"%@|%@|%@|%@|%@|%@|||||||||||GQs7yium",key,txnid1,amount,productInfo,firstname,email];
NSString *hash = [self createSHA512:hashValue];
NSDictionary *parameters = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:txnid1,key,amount,productInfo,firstname,email,phone,surl,furl,hash,serviceprovider
, nil] forKeys:[NSArray arrayWithObjects:@"txnid",@"key",@"amount",@"productinfo",@"firstname",@"email",@"phone",@"surl",@"furl",@"hash",@"service_provider", nil]];
__block NSString *post = @"";
[parameters enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if ([post isEqualToString:@""]) {
post = [NSString stringWithFormat:@"%@=%@",key,obj];
}else{
post = [NSString stringWithFormat:@"%@&%@=%@",post,key,obj];
}
}];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://test.payu.in/_payment"]]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];
[request setHTTPBody:postData];
[_webviewSample loadRequest:request];
then functions to be used
-(NSString *)createSHA512:(NSString *)string
{
const char *cstr = [string cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:string.length];
uint8_t digest[CC_SHA512_DIGEST_LENGTH];
CC_SHA512(data.bytes, (CC_LONG)data.length, digest);
NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x", digest[i]];
return output;
}
Solution 2
Finally i resolved the issue regarding PayU India (not payU,payU and payUindia have a slight difference as mention) integration (above code is for payU Money help alot) Download github Repo here
You only need to remove an extra parameter which is service_provider whose value is payu_paisa.
int i = arc4random() % 9999999999;
NSString *strHash = [self createSHA512:[NSString stringWithFormat:@"%d%@",i,[NSDate date]]];// Generatehash512(rnd.ToString() + DateTime.Now);
NSString *txnid1 = [strHash substringToIndex:20];
NSLog(@"tnx1 id %@",txnid1);
NSString *key = @"YOURKEY";
NSString *salt = @"YOURSALTKEY";
NSString *amount = @"100";
NSString *productInfo = @"Niceproduct";
NSString *firstname = @"Deepak";
NSString *email = @"[email protected]";
NSString *phone = @"9212138007";
NSString *surl = @"www.google.com";
NSString *furl = @"www.google.com";
NSString *hashValue = [NSString stringWithFormat:@"%@|%@|%@|%@|%@|%@|||||||||||%@",key,txnid1,amount,productInfo,firstname,email,salt];
NSString *hash = [self createSHA512:hashValue];
NSDictionary *parameters = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:txnid1,key,amount,productInfo,firstname,email,phone,surl,furl,hash
, nil] forKeys:[NSArray arrayWithObjects:@"txnid",@"key",@"amount",@"productinfo",@"firstname",@"email",@"phone",@"surl",@"furl",@"hash", nil]];
__block NSString *post = @"";
[parameters enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if ([post isEqualToString:@""]) {
post = [NSString stringWithFormat:@"%@=%@",key,obj];
}else{
post = [NSString stringWithFormat:@"%@&%@=%@",post,key,obj];
}
}];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://test.payu.in/_payment"]]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];
[request setHTTPBody:postData];
[_webviewSample loadRequest:request];
EDIT: how to handle URL payment is sucess or not
-(void)webViewDidFinishLoad:(UIWebView *)webView{
if (web_view_PayU.isLoading)
return;
NSURL *requestURL = [[web_view_PayU request] URL];
NSLog(@"requestURL=%@",requestURL);
NSString *getStringFromUrl=[NSString stringWithFormat:@"%@",requestURL];
if ([getStringFromUrl isEqualToString:@"https://test.payu.in/yoursucessurladdedhere "]||[getStringFromUrl isEqualToString:@"https://secure.payu.in/yoursucessurladdedhere "])
{
//SUCCESS ALERT
//jump to place order API
}
else if ([getStringFromUrl isEqualToString:@"https://test.payu.in/yourfailureurladdedhere "]||[getStringFromUrl isEqualToString:@"https://secure.payu.in/yourfailureurladdedhere"])
{
// FAIL ALERT
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Sorry!" message:@"Your Order Not Successfull!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
alert.tag=2222;
[alert show];
}
}
For Android Integration of Pay U check link--
Solution 3
I mailed to the PayUMoney Technical team and got my answer why i am getting error "Sorry, Some Problem Occurred."
Got a quick reply for the Technical Team:
Recently, we have done some modifications in test environment due to which test key-JBZaLc and salt-GQs7yium will not work anymore.
In order to test the gateway using a test key and salt, kindly follow these steps:
1 - Go on https://test.payumoney.com
2 - Sign up as a merchant - use any of your valid email ids - kindly do not use a random email id.
3 - Complete the "Business Details" - you may use PAN no. ABCDE1234F and DOB - 01/04/1990
4 - Complete "Bank Account Details" (You may use IFSC- ALLA0212632)
5 - Go to below mentioned location to get the Test Merchant Id :
Seller Dashboard -> Settings -> My account -> Profile Settings
Once you provide your test merchant id, we will approve it so that you can find your test key and salt at :
Seller Dashboard -> Settings -> My account -> Merchant Key - Salt
Download Github Repository
Comments
-
Mani murugan about 2 years
I have to integrate PayUMoney payment gateway in my iOS app. They don't have SDK for iOS. So I have to load some web URL in webview for the payment. My parameters are
int i = arc4random() % 9999999999; NSString *strHash = [self createSHA512:[NSString stringWithFormat:@"%d%@",i,[NSDate date]]];// Generatehash512(rnd.ToString() + DateTime.Now); NSString *txnid1 = [strHash substringToIndex:20]; NSLog(@"tnx1 id %@",txnid1); NSString *key = @"JBZaLc"; NSString *amount = @"1000"; NSString *productInfo = @"Nice product"; NSString *firstname = @"Mani"; NSString *email = @"[email protected]"; NSString *phone = @"1234566"; NSString *surl = @"www.google.com"; NSString *furl = @"www.google.com"; NSString *serviceprovider = @"payu_paisa"; NSString *action = @"https://test.payu.in/_payment"; NSString *hashValue = [NSString stringWithFormat:@"%@|%@|%@|%@|%@|%@|udf1|udf2|udf3|udf4|udf5||||||salt",key,txnid1,amount,productInfo,firstname,email]; NSString *hash = [self createSHA512:hashValue]; NSDictionary *parameters = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:txnid1,key,amount,productInfo,firstname,email,phone,surl,furl,hash,serviceprovider,action, nil] forKeys:[NSArray arrayWithObjects:@"txnid",@"key",@"amount",@"productinfo",@"firstname",@"email",@"phone",@"surl",@"furl",@"hash",@"service_provider",@"action", nil]];
I have to use POST method with my test URL (
https://test.payu.in/_payment
) and need to pass parameters. I have all parameters with key and value in dictionary("parameters"). So I tried following codeNSData *dataValue = [self getPropertiesAsData:parameters]; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://test.payu.in/_payment"]]; // Create a mutable copy of the immutable request and add more headers NSMutableURLRequest *mutableRequest = [request mutableCopy]; [mutableRequest setHTTPMethod: @"POST"]; [mutableRequest setHTTPBody: dataValue]; request = [mutableRequest copy]; [_webviewSample loadRequest:request]; -(NSData *)getPropertiesAsData :(NSDictionary *)dict{ NSMutableData *body = [NSMutableData postData]; [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { [body addValue:[obj stringByReplacingOccurrencesOfString:@" " withString:@"%20"] forKey:key]; }]; return body; } -(NSString *)createSHA512:(NSString *)string { const char *cstr = [string cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data = [NSData dataWithBytes:cstr length:string.length]; uint8_t digest[CC_SHA512_DIGEST_LENGTH]; CC_SHA512(data.bytes, data.length, digest); NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2]; for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++) [output appendFormat:@"%02x", digest[i]]; return output; }
But when I run this, it says "Mandatory parameter tnxid is missing". But I have passed the tnxid which you can see in parameters dictionary. If I pass everything correctly then result will be the webpage where user can select bank details, etc that I have to load it in my web view.
Please help me to find what I did wrong or what I should do to get correct result.
-
9to5ios over 9 yearshello please any idea? getting error sorry some problem occur
-
9to5ios over 9 yearshello, you are using payUmonkey SALT and merchant key. Did you use payUmoney? as i am working with PayUindia and its not working by key provided by them.Any help welcome
-
NSPratik over 9 yearsCan anyone tell how I will get to know that my payment is succeeded or failed ? The above code is working fine for me and showing payment screen, but what about payment result ? Please help me as I am desperate to the answer. I am stuck at this point.
-
9to5ios over 9 yearsHello pratik, please check the github repo,it includes the code to handle the payment sucess of fail,quick hit,just check the sucess and fail url load at webview delegate method and according to it add your condition...hope it will help
-
NSPratik over 9 yearsThanks you so much for your reply iphonemaclover. I have implemented as per your example. But my main point is how I will know that payment succeeded or not in -(void)webViewDidFinishLoad:(UIWebView *)webView method ? I have made request with checksum and everything using webview, but this is the point I have stuck.
-
9to5ios over 9 yearscheck my edit answer now,simily compair the load url with the url u got it something url/urlfail or url/urlsucess just check if the url string contain it or not...
-
NSPratik over 9 yearsThanks a lot iphonemaclover !!! Let me try it and I will come back if I have any query..
-
Dharmesh Dhorajiya almost 9 yearshi @iphonemaclover i have use you github example and try to run using my key but return error 404 page not fount plese help me bcz i need integrate payu payment in ios.
-
Dharmesh Dhorajiya almost 9 yearshi @Suraj Mirajkar i have use above code but i return error 404 page not found and use this link test.payu.in/_payment please help.
-
9to5ios almost 9 yearsmust confirm, you are using payu or payUindia,my example is for payUindia. And must check your NSString *key = @"YOURKEY"; NSString *salt = @"YOURSALTKEY"; is correct.
-
9to5ios almost 9 years@DharmeshDhorajiya for only <PayU> integration follow Mani murugan accepted answer.
-
Dharmesh Dhorajiya almost 9 yearsyes i have try both but i get 404 page error some problem occur like that @iphonemaclover
-
Dharmesh Dhorajiya almost 9 yearsand i tried then ask question, see this stackoverflow.com/questions/31681781/… @iphonemaclover
-
SGDev over 8 yearshello @iphonemaclover , I am using a same code and it will work fine in some cases. means if i used this key = "gtKFFx" and salt = "eCwWELxi' , it will not work. Please tell me what is the reason behind this.
-
SGDev over 8 years@iphonemaclover , payUindia and payUmoney are different?
-
9to5ios over 8 years@SumitGarg sorry for being late reply, No they have both have same provider, but according to need merchant purchase payuindia or payumoney.
-
Bhumit Mehta almost 8 yearsWhere can I find sandbox credit card details for testing successfull payment?
-
Bhumit Mehta almost 8 yearsOne can find test credentials here. edugcet.in/franchisee_download/…
-
Mani murugan almost 8 yearsThanks for you help @BhumitMehta