Symfony 5 - 使用 MangoPay 注册信用卡的表格有问题
Symfony 5 - A problem with the form to registrate a credit card with MangoPay
我正在尝试使用 MangoPay 注册信用卡。
我已经安装了 mangopay/php-sdk-v2
包。
注册信用卡需要三个步骤。
- 创建卡片的令牌
- Post 卡片信息(使用由令牌创建的 url)将呈现以
data=
开头的字符串
- 将注册卡添加到MangoPay用户
// ProfilController.php
/**
* @Route("/payment/{id}", name="payment")
* * @param int $id
*/
public function payment(Request $request, ApiUser $ApiUser, $id): Response
{
$returnUrl = "";
$user = $this->userRepository->findOneBy(['id' => $id]);
$userId = $user->getIdMangopay();
$registration = $ApiUser->Registration($userId);
if($request->request->count() > 0){
$payment = new PaymentMethod();
$payment->setName($request->request->get('name'));
$payment->setCardNumber($request->request->get('cardNumber'));
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($payment);
$entityManager->flush();
$registrationCard = $ApiUser->RegistrationCard($registration, $request);
$returnUrl = 'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . $_SERVER['HTTP_HOST'];
$returnUrl .= '/profil';
}
return $this->render('home/payment.html.twig', [
'CardRegistrationUrl' => $registration->CardRegistrationURL,
'Data' => $registration->PreregistrationData,
'AccessKeyRef' => $registration->AccessKey,
'returnUrl' => $returnUrl,
]);
}
Registration
和 ResitrationCard
函数来自 ApiUser
文件:
// ApiUser.php
public function Registration($UserId)
{
$CardRegistration = new \MangoPay\CardRegistration();
$CardRegistration->UserId = $UserId;
$CardRegistration->Currency = "EUR";
$CardRegistration->CardType = "CB_VISA_MASTERCARD";
$Result = $this->mangoPayApi->CardRegistrations->Create($CardRegistration);
$this->registrationInfo = $Result;
$this->CardRegistrationUrl = $Result->CardRegistrationURL;
return $Result;
}
public function RegistrationCard($CardInfo)
{
$cardRegister = $this->mangoPayApi->CardRegistrations->Get($CardInfo->Id);
$cardRegister->RegistrationData = $_SERVER['QUERY'];
$updatedCardRegister = $this->mangoPayApi->CardRegistrations->Update($cardRegister);
return $Result;
}
我可以创建卡的令牌并获得 data=
字符串,但问题是我无法执行最后一步。
看来我无法进入if
语句,所以它没有在数据库中注册卡,我无法更新卡信息(第3步)。
returnUrl
,我可以简单地将它放在 if
语句之外使其工作,但我只想在表单有效时更改它。
我该如何修改该语句?为什么不进入if
?
请尝试使用 Symfony 的常规表单验证过程,如果有帮助请告诉我。
为此,您需要自定义输入名称属性以匹配付款 API 配置。
在你的类型中class:
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
// ...
->add('new-input-name-goes-here', TextType::class, [
'property_path' => '[data]'
]);
}
public function getBlockPrefix()
{
return '';
}
我正在尝试使用 MangoPay 注册信用卡。
我已经安装了 mangopay/php-sdk-v2
包。
注册信用卡需要三个步骤。
- 创建卡片的令牌
- Post 卡片信息(使用由令牌创建的 url)将呈现以
data=
开头的字符串
- 将注册卡添加到MangoPay用户
// ProfilController.php
/**
* @Route("/payment/{id}", name="payment")
* * @param int $id
*/
public function payment(Request $request, ApiUser $ApiUser, $id): Response
{
$returnUrl = "";
$user = $this->userRepository->findOneBy(['id' => $id]);
$userId = $user->getIdMangopay();
$registration = $ApiUser->Registration($userId);
if($request->request->count() > 0){
$payment = new PaymentMethod();
$payment->setName($request->request->get('name'));
$payment->setCardNumber($request->request->get('cardNumber'));
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($payment);
$entityManager->flush();
$registrationCard = $ApiUser->RegistrationCard($registration, $request);
$returnUrl = 'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . $_SERVER['HTTP_HOST'];
$returnUrl .= '/profil';
}
return $this->render('home/payment.html.twig', [
'CardRegistrationUrl' => $registration->CardRegistrationURL,
'Data' => $registration->PreregistrationData,
'AccessKeyRef' => $registration->AccessKey,
'returnUrl' => $returnUrl,
]);
}
Registration
和 ResitrationCard
函数来自 ApiUser
文件:
// ApiUser.php
public function Registration($UserId)
{
$CardRegistration = new \MangoPay\CardRegistration();
$CardRegistration->UserId = $UserId;
$CardRegistration->Currency = "EUR";
$CardRegistration->CardType = "CB_VISA_MASTERCARD";
$Result = $this->mangoPayApi->CardRegistrations->Create($CardRegistration);
$this->registrationInfo = $Result;
$this->CardRegistrationUrl = $Result->CardRegistrationURL;
return $Result;
}
public function RegistrationCard($CardInfo)
{
$cardRegister = $this->mangoPayApi->CardRegistrations->Get($CardInfo->Id);
$cardRegister->RegistrationData = $_SERVER['QUERY'];
$updatedCardRegister = $this->mangoPayApi->CardRegistrations->Update($cardRegister);
return $Result;
}
我可以创建卡的令牌并获得 data=
字符串,但问题是我无法执行最后一步。
看来我无法进入if
语句,所以它没有在数据库中注册卡,我无法更新卡信息(第3步)。
returnUrl
,我可以简单地将它放在 if
语句之外使其工作,但我只想在表单有效时更改它。
我该如何修改该语句?为什么不进入if
?
请尝试使用 Symfony 的常规表单验证过程,如果有帮助请告诉我。
为此,您需要自定义输入名称属性以匹配付款 API 配置。
在你的类型中class:
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
// ...
->add('new-input-name-goes-here', TextType::class, [
'property_path' => '[data]'
]);
}
public function getBlockPrefix()
{
return '';
}