У меня есть оплата (код ниже)
public function orderspayonline(Request $request, $id){
error_log('masuk ke snap token dri ajax');
$midtrans = new Midtrans;
$item = Order::findOrFail($id);
$buyer = $item->buyer_name;
$address = $item->address;
$city = $item->city;
$postalcode = $item->postalcode;
$province = $item->province;
$email = $item->buyer_email;
$phone = $item->phone;
$carttotal = $item->price;
$shipping = $item->shipping_cost;
$transaction_details = array(
'order_id' => uniqid(),
'gross_amount' => $carttotal,
// gross amount (total price buyer has to pay) is saved in order raw included shipping method like: (total price + weight * shipping cost).
);// getting orders items detail
$item_details = array();
if(!empty($item->product_data)){ //product_data is my json column
foreach($item->product_data as $item)
{
//calculate items price
foreach($item['attributes'] as $itemsss)
{
$proweight = $itemsss['value'];
}
$pp = $item['quantity'] * $proweight * $shipping + $item['price'];
//end calculation
$item_details[] = array(
'id' => $item['id'],
'price' => $pp,
'quantity' => $item['quantity'],
'name' => $item['name'],
);
}
}else{
$item_details[] = array(
'id' => $item->id,
'price' => $item->price,
'quantity' => $item->quantity,
'name' => $item->product,
);
}
// to be continued....
теперь, как вы видите в моем //getting orders items detail
у меня есть 2 типа петли, first one
будет зацикливать заказы с деталями на основе json second one
будет зацикливать заказы, созданные вручную для пользователей администраторами, данные которых не являются json.
Ранее я добавил //calculate items price
Что касается веса заказа и стоимости доставки, рассчитанных с ценой товара, то в этом случае моя сумма брутто будет такой же, как и цена товара, и все будет работать без ошибок.
Проблема возникает, когда у меня более одного элемента в моих заказах на основе JSON, тогда мой настроенный цикл больше не будет работать, и я получаю ошибку gross_amount
не такой как items_price
,
Любая идея, где я должен изменить?
мой код заказа JSON с несколькими элементами
{"4":{"id":4,"name":"product four","price":1500000,"quantity":2,"attributes":{"attr":{"name":"weight","value":"45"}},"conditions":[],"_conditions":[{"name":"Black","value":"10000"},{"name":"12 inch","value":"25000"}]},"1":{"id":1,"name":"product one","price":10000000,"quantity":"1","attributes":{"attr":{"name":"weight","value":"1"}},"conditions":[{}],"_conditions":[{"name":"Black","value":"10000"}]}}
мой код заказа JSON с одним элементом
{"4":{"id":4,"name":"product four","price":1535000,"quantity":"1","attributes":{"attr":{"name":"weight","value":"45"}},"conditions":[{},{}],"_conditions":[{"name":"Black","value":"10000"},{"name":"12 inch","value":"25000"}]}}
gross amount
мой gross_amount
приходят из колонки с именем price
значение этого является суммой:
shipping cost * cart total weight + cart total amount
В общую сумму корзины могут быть включены дополнительные опции, добавленные к товарам, или купоны, уменьшенные с цены товаров.
уловка, которую я использовал:
Получение этой полной цены (вверх), как мой gross amount
чтобы получить стоимость доставки от клиента, но проблема заключается в том, что моя компания-шлюз настаивает на том, чтобы мой gross_amount
а также items_price
быть точно таким же, что не делает мне сеанс, потому что я должен также получить стоимость доставки.
Таким образом, трюк заключался в манипулировании ценой предметов, чтобы поднять их до суммы, богатой моей gross_amount
что я сделал, добавив:
$pp = $item['quantity'] * $proweight * $shipping + $item['price'];
теперь я понял, что я не включил эти дополнительные опции / коды купонов
ценности
you can find them in _conditions in my sample codes above
в моем $pp
и именно поэтому сумма цен на товары никогда не увеличивается gross_amount
,
есть идеи как их добавить?
Ваши транспортные расходы основаны на весе продуктов и количестве, поэтому вам нужно изменить свой код следующим образом,
// getting orders items detail
$item_details = array();
if(!empty($item->product_data)){ //product_data is my json column
$pp = 0;
foreach($item->product_data as $item)
{
//calculate items price
foreach($item['attributes'] as $itemsss)
{
$proweight = $itemsss['value'];
}
$pp = $pp + $item['quantity'] * $proweight * $shipping + $item['price'];
//end calculation
$item_details[] = array(
'id' => $item['id'],
'price' => $pp,
'quantity' => $item['quantity'],
'name' => $item['name'],
);
}
}
Я изменил свою функцию на код ниже:
if(!empty($item->product_data)){
foreach($item->product_data as $item)
{
//calculate items price
foreach($item['attributes'] as $itemsss)
{
$proweight = $itemsss['value'];
}$convals = 0;
foreach($item['_conditions'] as $conditionf)
{
$convals += $conditionf['value'];
}
$pp = $item['price'];
$pp1 = $proweight * $shipping;
$pp2 = $pp + $pp1;
//end calculation
$item_details[] = array(
'id' => $item['id'],
'price' => $pp2,
'quantity' => $item['quantity'],
'name' => $item['name'],
);
}
И спас мой $item['price']
из внешнего интерфейса как полная цена со всеми условиями / купонами, добавленными в нее, в этом случае мне не нужно рассчитывать цену условий в моей функции оплаты, уже сохраненной как цена моего товара. 🙂
спасибо за все помогает.