头条小程序对接微信、支付宝

<?php
/**
 * 头条小程序对接微信、支付宝支付
 * 服务端获取OrderInfo
 * tt.pay 文档地址:
 * https://microapp.bytedance.com/docs/zh-CN/mini-app/develop/api/open-interface/payment/tt-pay
 */
function GetOrderInfo (){
    $order_id = $_POST['order_id'];//订单ID
    $service = $_POST['service'];//支付类型 1拉起小程序收银台,3微信 API 支付,4支付宝 API 支付
    $order = M('order')->where(['id'=>$order_id])->field('id,order_sn,title,money')->find();//订单信息
    $orderInfo = [
        'merchant_id' => C('BYTE_MERCHANT_ID'),//开发者后台支付设置页的商户号
        'app_id' => C('BYTE_APP_ID'),//开发者后台支付设置页的 app_id
        'sign_type' => 'MD5',//固定值:MD5。商户生成签名的算法类型
        'timestamp' => (string)time(),//发送请求的时间戳,精确到秒
        'version' => '2.0',//固定值:2.0
        'trade_type' => 'H5',//固定值:H5
        //'sign' => '',//签名,具体签名方案见 服务端签名
        'product_code' => 'pay',//固定值:pay
        'payment_type' => 'direct',//固定值:direct
        'out_order_no' => $order['order_sn'],//商户订单号
        'uid' => C('BYTE_APP_ID'),//固定值:同 app_id
        'total_amount' => $order['money'] * 100,//金额,整型,单位:分(不能有小数)
        'currency' => 'CNY',//固定值: CNY。币种
        'subject' => $order['title'],//商户订单名称
        'body' => $order['title'],//商户订单详情
        'trade_time' => (string)time(),//下单时间戳,精确到秒
        'valid_time' => '600',//订单有效时间(单位 秒)
        'notify_url' => 'https://tp-pay.snssdk.com/paycallback',//固定值:https://tp-pay.snssdk.com/paycallback
        //'alipay_url' =>'',//调用支付宝 App 支付所需的支付请求参数
        //'wx_url' =>'',//调用微信 H5 支付统一下单接口 返回的 mweb_url 字段值(请注意不要进行 urlencode)。
        //'wx_type' =>'',//wx_url 非空时传 'MWEB'。wx_url 为空时,该字段不传
        'risk_info' => json_encode(['ip'=>getIP()]),//支付风控参数。序列化后的 JSON 结构字符串,JSON 结构如下:{ip: '用户外网IP'}
    ];
    if($service == 3){
        //获取微信H5支付的mweb_url(需自己对接)
        $wx_pay_url = get_wx_pay_url($order_id);
        $orderInfo['wx_url'] = $wx_pay_url;
        $orderInfo['wx_type'] = 'MWEB';
    }elseif ($service == 4){
        //获取支付宝App支付请求参数(需自己对接)
        $ali_pay_url = get_ali_pay_url($order_id);
        $orderInfo['alipay_url'] = $ali_pay_url;
    }
    $orderInfo['sign'] = get_tt_pay_sign($orderInfo,C('BYTE_APP_SECRET'));
    return $orderInfo;
}

/**
 * @desc 服务端签名
 * @param array $orderInfo 签名前的支付数据
 * @param string $app_secret 头条支付secret
 * @return string 签名结果字符串
 */
function get_tt_pay_sign(array $orderInfo, $app_secret){
    //1.去掉请求参数中 sign 与 risk_info 字段、value 为空的字段。
    foreach ($orderInfo as $k=>$v){
        if($k == 'sign' || $k == 'risk_info' || empty($v)){
            unset($orderInfo[$k]);
        }
    }

    //2.把筛选后的 k-v 集合按照 key 的 ASCII 码升序排序
    ksort($orderInfo);

    //3.k-v 按照 key=value 的格式链接,并且按照 key 排序使用 & 连接成一个字符串,生成待签名字符串
    $parts = [];
    foreach ($orderInfo as $k => $v) {
        $parts[] = $k . '=' . $v;
    }

    //4.待签名字符串
    $unsigned_str = implode('&', $parts);
    file_put_contents('unsigned_str.txt',$unsigned_str);//保存一下 支付自助校验时会用到

    //5.MD5 加签
    $sign = md5($unsigned_str.$app_secret);
    return $sign;
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凌晨四点的_LA

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

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

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

打赏作者

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

抵扣说明:

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

余额充值