Конвертировать из кода PHP в код Ruby. Это правильно?

Я пытаюсь интегрировать 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«Я всегда получаю сообщение об ошибке: параметр, отправленный продавцом, был неточным.

Может кто-нибудь помочь мне исправить это? Огромное спасибо.

-1

Решение

Просто замените RestClient.post с:

response = RestClient.post api_url, params

По вашему запросу params кажется идентичным как в php код, но вы отправляете их как вложенные в хеш с :params ключ.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]