+
80
-

抖音字节小程序的虚拟商品订单如何使用php进行同步?

抖音字节小程序的虚拟商品订单如何使用php进行同步?


网友回复

+
0
-

抖音官方有开发文档,小程序是非POI订单,产生的订单信息要通过这个接口推送到抖音订单中心。

800_auto

订单推送接口接入之前必须接入担保支付。

接口说明

接口适用范围:接入交易系统的订单将不再需要本接口进行推送,交易系统将会自动推送至抖音订单中心。

订单类型释义:

POI订单:当订单内的商品是进入了抖音商品库的商品称为 POI 订单,请参照下述订单类型上传order_detail。

非 POI 订单:未做商品同步的则为非 POI 订单。请使用小程序普通订单规范上传 order_detail。

非 POI 订单统一为普通小程序订单,order_type 为 0

open_id 生成规范: 小程序开发说明 IDE 中的 open_id 生成逻辑与真机调试不同,使用 IDE 中的 open_id 做订单同步会出现错误,请使用真机调试做订单同步。

官网有文档:https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/server/ecpay/order/order-sync/

php示例代码

<?php

function getAccessToken() {
    $appid = 'YOUR_APP_ID'; // Replace with your app id
    $appSecret = 'YOUR_APP_SECRET'; // Replace with your app secret

    $data = array(
        "appid" =>$appid, "secret" => $appSecret,
        'grant_type' => 'client_credential',
    );

    $json = json_encode($data);
    return doPostJson("https://developer.toutiao.com/api/apps/v2/token", $json, "UTF-8");
}

/*
 推送订单到抖音订单中心
     * @param open_id   用户openid
     * @param order_status
     普通小程序订单订单状态,POI 订单可以忽略
     * 0:待支付
     * 1:已支付
     * 2:已取消
     * 4:已核销
     * 5:退款中
     * 6:已退款
     * 8:退款失败
     * 注意:普通小程序订单必传,担保支付分账依赖该状态
     * @param orderNo. 商户订单号
     * @param status 订单状态,与上面的不一样,参看文档
     * @param totalPrice 金额分
     *
*/
function pushOrder($open_id, $order_status, $orderNo, $status, $totalPrice) {
    $item = array(
        'item_code' => strval(time()), // System.currentTimeMillis()
        'img' => 'https://repo.bfw.wiki/bfwrepo/image/60dd75384c21a.png',
        'title' => '零食大礼包',
        'sub_title' => '200g重量',
        'price' => $totalPrice,
    );

    $list = array($item);

    $orderDetail = array(
        'order_id' => $orderNo,
        'create_time' => time(), // System.currentTimeMillis()
        'status' => $status,
        'amount' => 1,
        'total_price' => $totalPrice,
        'detail_url' => 'pages/detail/detail',
        'item_list' => $list,
    );

    $accessToken = getAccessToken(); // Assume that getAccessToken() returns the access token directly

    if (isset($accessToken['err_no']) && $accessToken['err_no'] == 0) {
        $json = array(
            'access_token' => $accessToken['data']['access_token'],
            'app_name' => 'douyin',
            'open_id' => $open_id,
            'order_status' => $order_status,
            'order_type' => 0,
            'update_time' => time(),
            'order_detail' => json_encode($orderDetail),
        );

        $ret = doPostJson("https://developer.toutiao.com/api/apps/order/v2/push", json_encode($json), "UTF-8");

    } else {
        die($accessToken['err_tips']);
    }



    return $ret;
}

function doPostJson($url, $jsonStr, $charset) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'charset' => $charset
    ));

    $result = curl_exec($ch);

    if (!$result) {
        die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
    }
    var_dump($result);
    curl_close($ch);
    return  json_decode($result, 1);;
}
pushOrder(11, 1, 123132, 110, 1);
?>

我知道答案,我要回答