Я пытаюсь интегрировать API для оплаты онлайн. API использует PHP-код. Мой сайт — ruby on rails, поэтому я должен преобразовать его в ruby. Вот код PHP:
$merchant_id = '17260';
$password = 'cecae5cffadff3cecfc45ce370ef1803';
$params = array(
'func' => 'CardCharge',
'version' => '2.0',
'merchant_id' => $merchant_id,
'merchant_account' => '[email protected]',
'merchant_password' => MD5($merchant_id.'|'.$password),
'pin_card' => '12345678912345',
'card_serial' => 'XYZ123',
'type_card' => 'VNP',// VNP hoặc VMS hoặc VIETTEL
'ref_code' => time(),
'client_fullname' => 'Do Cong Dien',
'client_email' => '[email protected]',
'client_mobile' => '0904515105',
);
$post_field = '';
foreach ($params as $key => $value){
if ($post_field != '') $post_field .= '&';
$post_field .= $key."=".$value;
}
$api_url = "https://www.nganluong.vn/mobile_card.api.post.v2.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$api_url);
curl_setopt($ch, CURLOPT_ENCODING , 'UTF-8');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_field);
$result = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
И вот мой преобразованный код Ruby:
require 'digest/md5'
require 'rest-client'
merchant_id = '40432'
password = 'xxxxxx'
params = {
'func' => 'CardCharge',
'version' => '2.0',
'merchant_id' => merchant_id,
'merchant_account' => '[email protected]',
'merchant_password' => Digest::MD5.hexdigest(merchant_id + '|' + password),
'pin_card' => @card.pin,
'card_serial' => @card.serial,
'type_card' => @card.type, # VNP hoặc VMS hoặc VIETTEL
'ref_code' => Time.now.to_i,
'client_fullname' => 'My Name',
'client_email' => '[email protected]',
'client_mobile' => 'xxxx33424'
}
#post_field = ''
#params.each do |k, v|
# if (post_field != '')
# post_field += '&'
# end
# post_field += k.to_s+'='+v.to_s
#end
api_url = "https://www.nganluong.vn/mobile_card.api.post.v2.php"result = ''
status = ''
error = ''
begin
response = RestClient.post api_url, :params => params
status = response.code # http status
result = response.body # result
rescue Exception => e
error = e.message # error messages
end
Но когда я публикую данные в URL API: https://www.nganluong.vn/mobile_card.api.post.v2.php«Я всегда получаю сообщение об ошибке: параметр, отправленный продавцом, был неточным.
Может кто-нибудь помочь мне исправить это? Огромное спасибо.
Просто замените RestClient.post
с:
response = RestClient.post api_url, params
По вашему запросу params
кажется идентичным как в php
код, но вы отправляете их как вложенные в хеш с :params
ключ.
Других решений пока нет …