API를 사용하여 Drupal 양식을 만들고 필요에 따라 양식을 작성할 때 Braintree는 인증 예외를 반환합니다. 동일한 렌더링 된 HTML을 페이지에 출력하면 (API 건너 뛰기) 작동합니다. 나는 이유를 이해할 수 없다!Drupal Form API 및 BrainTree 예외 인증
아래 코드는 작동하지 않습니다.
function my_module_menu() {
$items['user/payment/add'] = array(
'title' => t('Add Card'),
'type' => MENU_LOCAL_TASK,
'page callback' => 'drupal_get_form',
'page arguments' => array('my_module_add_form'),
'access arguments' => array('access content'),
'weight' => 2,
);
}
function my_module_add_form() {
global $user;
require_once 'sites/all/libraries/braintree/lib/Braintree.php';
Braintree_Configuration::environment('sandbox');
Braintree_Configuration::merchantId('xxx');
Braintree_Configuration::publicKey('xxx');
Braintree_Configuration::privateKey('xxx');
$customer = Braintree_Customer::find($user->uid);
$trData = Braintree_TransparentRedirect::updateCustomerData(
array(
'redirectUrl' => 'http://www.xxx.com/user/payment',
'customerId' => $user->uid
)
);
$form['#action'] = url(Braintree_TransparentRedirect::url(), array('external' => true));
$form['customer[first_name]'] = array(
'#type' => 'textfield',
'#title' => t('First Name'),
);
$form['customer[last_name]'] = array(
'#type' => 'textfield',
'#title' => t('Last Name'),
);
$form['tr_data'] = array(
'#type' => 'hidden',
'#value' => htmlentities($trData),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save')
);
return $form;
}
나는 정확한 HTML 출력이 normal_menu_item하고 위와 같은 자격 증명을 사용하여이 작업을 수행 할 것을 가지고 대신하는 경우 ...
function my_module_menu() {
$items['user/payment/add'] = array(
'title' => t('Add Card'),
'type' => MENU_NORMAL_ITEM,
'page callback' => 'my_module_add_page',
'access arguments' => array('access content'),
'weight' => 2,
);
}
function my_module_add_page() {
global $user;
require_once 'sites/all/libraries/braintree/lib/Braintree.php';
Braintree_Configuration::environment('sandbox');
Braintree_Configuration::merchantId('xxx');
Braintree_Configuration::publicKey('xxx');
Braintree_Configuration::privateKey('xxx');
$customer = Braintree_Customer::find($user->uid);
$trData = Braintree_TransparentRedirect::updateCustomerData(
array(
'redirectUrl' => 'http://www.xxx.com/user/payment',
'customerId' => $user->uid
)
);
$output="
<form accept-charset='UTF-8' id='tqcustom-billing' method='post' action='".Braintree_TransparentRedirect::url()."'>
<div>
<div class='form-item form-type-textfield form-item-customer-first-name'>
<label for='edit-customer-first-name'>First Name </label>
<input type='text' class='form-text' maxlength='128' size='60' value='' name='customer[first_name]' id='edit-customer-first-name'>
</div>
<div class='form-item form-type-textfield form-item-customer-last-name'>
<label for='edit-customer-last-name'>Last Name </label>
<input type='text' class='form-text' maxlength='128' size='60' value='' name='customer[last_name]' id='edit-customer-last-name'>
</div>
<input type='hidden' value='".$trData."' name='tr_data'>
<input type='submit' class='form-submit' value='Save' name='op' id='edit-submit'>
</div>
</form>
";
return $output;
}
이 drupal_get_form에 대한 200 일의 상태 코드로 미세 반환 또는 drupal_render는 braintree가 양식 게시를 인증하는 데 필요한 환경을 종료합니다. 세상에서 무엇이 이것을 일으킬 수 있습니까? 브라우저 HTML 출력은 정확히 두 가지 방법으로 모두 100 %이지만 첫 번째 방법은 인증되지 않습니다.
자세한 내용은 제게 물어보십시오. 나는이 정보를 제공하기 위해 필사적입니다.
감사합니다. John! 나는이 문제에 대해 너무 오래 동안 보냈다는 것을 믿을 수 없다. 나는 모든 것을 준비하는 데 너무 시간을 보냈다는 것을 믿을 수 없다고 말했다. 브레인 트리는 여기서 큰 소리로 외칠 자격이있어. –