php 抖音支付

直接上代码

在这里<?php
declare (strict_types=1);

namespace app\controller;

use think\facade\Log;
use think\Request;

class DemoController
{
    protected $appId = "ttc596*********e46e9";
    protected $secret = "420c20867e7**********8b005b5ddaa64a5b";
    protected $salt = "aLaBzmbdL*******************j574oaeOCX";
    protected $token = "123123";

    /**
     * 显示资源列表
     * doc https://microapp.bytedance.com/docs/zh-CN/mini-app/develop/api/open-interface/payment/secure/YE
     * @return \think\Response
     */
    public function index(): \think\Response
    {

        $outOrderNo = "test21052511401";//开发者侧的订单号
        $totalAmount = 1;//支付价格; 接口中参数支付金额单位为[分]
        $subject = "测试商品描述";
        $body = "测试商品详情";
        $validTimestamp = 60 * 60;//订单过期时间(秒);
        $notifyUrl = "http://edf17151ed2b.ngrok.io/index.php/notify";
        $response = $this->createOrder($outOrderNo, $totalAmount, $subject, $body, $validTimestamp, $notifyUrl);
        dd($response);
    }

    /**
     * @param Request $request
     * @return \think\response\Json
     */
    public function notify(Request $request): \think\response\Json
    {
        $notify = $request->param();
        if ($notify['msg_signature'] !== $this->signature($notify, $this->token)) {
            Log::record('回调验证错误');
        } else {
            //获取订单信息
            $order = json_decode($notify['msg'], true);
            //处理订单
        }


        $data = ['err_no' => '0', 'err_tips' => 'success'];
        return json($data);
    }

    /**
     * @param $outOrderNo
     * @param $totalAmount
     * @param $subject
     * @param $body
     * @param $validTimestamp
     * @param $notifyUrl
     * @return array|string
     */
    private function CreateOrder($outOrderNo, $totalAmount, $subject, $body, $validTimestamp, $notifyUrl)
    {
        $params = [
            'app_id'       => $this->appId,
            'out_order_no' => $outOrderNo,
            'total_amount' => $totalAmount,
            'subject'      => $subject,
            'body'         => $body,
            'valid_time'   => $validTimestamp,
            'notify_url'   => $notifyUrl,
            //'cp_extra' => $cpExtra,
            //'thirdparty_id' => $thirdPartyId,
            //'disable_msg' => $disableMsg,
            //'msg_page' => $msgPage,
            //'store_uid' => $storeUid
        ];

        $params = array_filter($params);
        $params['sign'] = $this->signature($params, $this->salt);
        //var_dump($params);die;
        return $this->post(
            'https://developer.toutiao.com/api/apps/ecpay/v1/create_order',
            $params
        );
    }

    /**
     * payment api signature
     * @param array $body
     * @param string $secret
     * @return string
     */
    public static function signature(array $body, string $secret): string
    {
        $filtered = [];
        foreach ($body as $key => $value) {
            if (in_array($key, ['sign', 'app_id', 'thirdparty_id'])) {
                continue;
            }

            $filtered[] =
                is_string($value)
                    ? trim($value)
                    : $value;
        }

        $filtered[] = trim($secret);
        sort($filtered, SORT_STRING);
        return md5(trim(implode('&', $filtered)));
    }

    /**
     * post request
     * @param string $uri
     * @param array $params
     * @param array $headers
     * @return string
     */

    private function post(string $uri, array $params = [], array $headers = []): array
    {
        $headers[] = 'Content-type: application/json';

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $uri);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $output = curl_exec($ch);
        curl_close($ch);

        return json_decode($output, true);
    }
}
插入代码片

index方法成功返回
下方示例:

{
  "order_id": "6819903302604491021",
  "order_token": "CgsIARCABRgBIAQoARJOCkx+WgXqCUIwTel2V3siEGZ0++poigIM+SMMxtMx798Vj0ZYzoTYBqeNslodUC9X5KAOHkR1YbSBz6I6pXATh5faIGy7R72A9vwm0OczGgA="
}

前端调起tt.pay拉起字节收银台,就行

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据引用的内容,uniapp抖音支付需要使用抖音小程序所需要的orderInfo字段,该字段必须是string类型的数据格式。你需要在onShow()函数中调用uni.getProvider()方法以获取支付服务提供商,并将其存储在本地缓存中。 对于字节跳动,抖音支付支持的版本是抖音iOS 9.1.0版本/Android 8.7.0版本。你需要在字节跳动开放平台进行企业认证,并在开发管理中设置小程序Key和服务器域名。然后,在功能管理中选择支付,完成相应信息的填写与提交测试版。 对于支付宝,你需要注册支付宝开放平台账号,并完成企业认证。然后,在开发者中心控制台选择创建网页和移动应用,并选择支付接入。填写与抖音小程序相同的名称,选择网页应用,添加APP支付能力。接下来,进行签约,签约的APP名称必须填写测试版字节跳动小程序的名称。完成签约后,在应用信息中设置接口加签方式,并保存下载相应文件。关于授权回调地址,可以暂时不管它。 综上所述,uniapp抖音支付需要通过uni.getProvider()方法获取支付服务提供商,并完成相应的认证和设置,才能实现支付功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [字节抖音小程序,使用 uniapp 调起内置支付](https://blog.csdn.net/GrootBaby/article/details/131913729)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [字节跳动小程序(抖音) uniapp PHP 支付宝SDK 开发支付功能](https://blog.csdn.net/weixin_41415511/article/details/108049639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间轴-小文同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值