-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathSaleRequest.php
134 lines (115 loc) · 3.04 KB
/
SaleRequest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
declare(strict_types=1);
namespace Skrill\Request;
use Money\Money;
use Skrill\ValueObject\Url;
use Skrill\ValueObject\Email;
use Skrill\ValueObject\Language;
use Skrill\ValueObject\Description;
use Skrill\ValueObject\TransactionID;
use Skrill\Request\Traits\GetPayloadTrait;
use Skrill\ValueObject\RecurringBillingNote;
use Skrill\Request\Traits\AmountFormatterTrait;
/**
* Class SaleRequest.
*/
final class SaleRequest
{
use GetPayloadTrait;
use AmountFormatterTrait;
/**
* @param TransactionID $transactionId
* @param Money $amount
*/
public function __construct(TransactionID $transactionId, Money $amount)
{
$this->payload = [
'transaction_id' => strval($transactionId),
'currency' => strval($amount->getCurrency()),
'amount' => $this->formatToFloat($amount),
];
}
/**
* @param Language $lang
*
* @return SaleRequest
*/
public function setLang(Language $lang): self
{
$this->payload['language'] = strval($lang);
return $this;
}
/**
* @param Email $email
*
* @return SaleRequest
*/
public function setPayFromEmail(Email $email): self
{
$this->payload['pay_from_email'] = strval($email);
return $this;
}
/**
* The detail1_description combined with the detail1_text is shown in the more information field of the merchant
* account history CSV file.
*
* Example:
* - detail1_description: "Product ID:"
* - detail1_text: "4509334"
*
* Using the example values, this would be "Product ID: 4509334".
*
* @param Description $productDescription
*
* @return SaleRequest
*/
public function setProductDescription(Description $productDescription): self
{
$this->payload['detail1_description'] = $productDescription->getSubject();
$this->payload['detail1_text'] = $productDescription->getText();
return $this;
}
/**
* @param Url $url
*
* @return $this
*/
public function setReturnUrl(Url $url): self
{
$this->payload['return_url'] = strval($url);
return $this;
}
/**
* @param Url $url
*
* @return $this
*/
public function setCancelUrl(Url $url): self
{
$this->payload['cancel_url'] = strval($url);
return $this;
}
/**
* @param Url $url
*
* @return $this
*/
public function setStatusUrl(Url $url): self
{
$this->payload['status_url'] = strval($url);
return $this;
}
/**
* @param RecurringBillingNote $note
* @param Money $money
*
* @return $this
*/
public function enableRecurringBilling(RecurringBillingNote $note, Money $money): self
{
$this->payload['ondemand_max_amount'] = $this->formatToFloat($money);
$this->payload['ondemand_max_currency'] = strval($money->getCurrency());
$this->payload['ondemand_note'] = strval($note);
return $this;
}
}