zoukankan      html  css  js  c++  java
  • 关于今日头条小程序(字节跳动小程序)相关问题

    上周突然遇到让开发今日头条小程序(字节跳动小程序)的需求,然后看了下文档发现真的简陋。而且文档有错别字。槽点有点多。但是和老版本的小程序相差不多,然后我就抱着试一试的心态,真的是试一试把微信小程序换了个id,然后打包上传,发现竟然跑的通!跑的通!跑的通!再说一次跑的通。当时我的内心是崩溃的,说好的tt.标签那,这样照搬真的好吗,好歹稍微改下啊。

    先说下遇到的提审不通过的几个原因:

      1、在部分页面有微信分享或者微信二维码等和微信有关的东西(因为是直接把微信小程序扔过去的所有清楚有点麻烦)

      2、要求页面不能有空白,没东西最少要有文字提示,这个算是一开始没想到的用户体验性

      3、视频要求能够下拉页面跳过的时候自动暂停或者悬浮窗显示(因为文档不详细,网上资料很少,社区资料 也没有,特别吐槽,社区的官方人员回应速度慢,基本都是扔个文档链接或者示例,感觉对开发者很不友好,特别是在文档不是太清晰的问题)

    遇到的坑,主要在支付这边,其他地方有问题的可以参考微信小程序,文档基本通用。头条因为没有自己的支付渠道,所以使用的是支付宝,利用tt.requestPayment()调起支付宝APP支付:

    支付具体流程为:后端通过openid和自己这边的订单号生成一个头条的订单号,具体操作可以看文档流程,然后生成调用支付宝的一个字符串,这里需要使用支付宝文档,我使用的支付宝SDK,这边支付宝文档很好的,网上资料很多。最后就是组装后返回给前端调用支付宝。特别注意的是这里使用的所有appid等参数都是头条分配给商户的appid等。

      1、签名,在官方文档中,支付接入文档中,有签名说明和签名不通过说明,这里有个坑就是,签名说明是下单的签名的说明,签名不通过说明与示例是前端调用支付宝APP的签名。

      我的代码,这里为了方便展示,用的拼接:

    $biz_content = array(
    
                'out_order_no' => $ordersn,
    
                'uid' => $openid,
    
                'merchant_id' => $ttshcode[$appid],
    
                'total_amount' =>$order['orderAmount'] ? $order['orderAmount'] * 100 : 0,
    
                'currency' => 'CNY',
    
                'subject' => $order['goodsName'] ? $order['goodsName'] :'名称' ,
    
                'body' => $ordersn.','.$order['orderAmount'],
    
                'trade_time' => $time,
    
                'valid_time' => '60',
    
                'notify_url' => 'http://www.******.com',
    
                'risk_info' => '127.0.0.1',
    
            );
    
    
            $biz_content = json_encode($biz_content);
    
            $data['app_id'] = $ttapppay[$appid];
    
            $data['biz_content'] = $biz_content;
    
            $data['charset'] = 'utf-8';
    
            $data['method'] = 'tp.trade.create';
    
            $data['sign_type'] = 'MD5';
    
            $data['timestamp'] = $time;
    
            $data['version'] = '1.0';
    
            ksort($data);
    
            $var = '';
    
            foreach($data as $key => $value){
    
                $var .= $key.'='.$value.'&';
    
            }
            $var = trim($var,'&');
    
    
            $c = $var.$secret;
    
            $data['sign'] = MD5($c);
      
            ksort($data);
    
            $vars = '';
            $vars = 'app_id='.$data['app_id'].'&biz_content='.$data['biz_content'].'&charset='.$data['charset'].'&method='.$data['method'].'&sign='.$data['sign'].'&sign_type='.$data['sign_type'].'&timestamp='.$data['timestamp'].'&version='.$data['version'];
            $url = 'https://tp-pay.snssdk.com/gateway';
         //进行post请求

    2.支付宝这边支付的字符串参考支付宝文档生成

    3.前端调用支付宝app,这边示例有个坑就是在支付宝字符串外面有一个花括号,这里有就提示签名错误,

    代码示例:

         $goodsName = $order['goodsName'] ? $order['goodsName'] :'名称';
            $urls = $this->alipay_get($goodsName,$datas['response']['trade_no'] , $order['orderAmount']); //这里是我写了个方法调用支付宝SDK的签名函数
    
            $list['app_id'] = $ttapppay[$appid]; // test
            $list['method'] = 'tp.trade.confirm';
            $list['sign_type'] = MD5;
            $list["uid"]=$openid;
            $list["total_amount"]=$order['orderAmount'] ? $order['orderAmount']*100 : 0;
            $list['timestamp'] = time();
            $list['pay_channel'] = "ALIPAY_NO_SIGN";
            $list["pay_type"] = "ALIPAY_APP";
            $list["trade_no"]= $datas['response']['trade_no'];
            $list["merchant_id"]= $ttshcode[$appid];
            $list["risk_info"]= $this->input->ip_address();
            $list["uid"]=$openid;
            $arrParam=array("url" =>  $urls);
            $strParam=json_encode($arrParam);
            $list["params"]=$strParam;
            $list['url'] =$urls;
            $signKeys=array("app_id","sign_type","timestamp","trade_no","merchant_id","uid","total_amount","params");
            $signData=array();
            foreach ($signKeys as $v) {
                $signData[$v] = $list[$v];
            }
    
            ksort($signData);
            $var = '';
            foreach($signData as $key => $value){
                $var .= $key.'='.$value.'&';
            }
            $var = trim($var,'&');
            $list['sign'] = MD5($var . $secret);
    $datas['response']['trade_no']为生成的单号。
    4.前端代码:
    var obj = JSON.parse(res.data.data);//
    
                    tt.requestPayment({
                        data: {
                            app_id: obj.app_id,
                            method: 'tp.trade.confirm',
                            sign: obj.sign,
                            sign_type: 'MD5',
                            timestamp: obj.timestamp.toString(),
                            trade_no: obj.trade_no,
                            merchant_id: obj.merchant_id,
                            uid: obj.uid,
                            total_amount: obj.total_amount,
                            pay_channel: 'ALIPAY_NO_SIGN',
                            pay_type: 'ALIPAY_APP',
                            risk_info: "{'ip':'"+obj.risk_info+"'}",
                            params: JSON.stringify({
                                    url:obj.url
                               }),
                            return_url: 'https://***********/',
                            show_url: 'https://*********/',
                        },
                        success (res) {
                            succ(res);
                            console.log(res);
                        },
                        fail (res) {
                            console.log(res);
                            wx.showModal({
                                title: '支付失败',
                                content: '',
                                complete (res) {
                                    return tt.navigateTo({
                                        url: '/pages/user/orders/orders'
                                    });
                                }
                            });
                            fail(res);
                        }
                    })

    我这边后端返回的是json格式,前端转换为对象。

    补充一下最近遇到的问题,上线的小程序更新被打回好几次,最后发现是字节跳动那边开通了抖音小程序,在抖音可以打开原先头条的小程序,然而之前的接口在抖音有部分不能使用(比如调用地址接口),而且文档未说明,也没有给通知,这样真的不太好

  • 相关阅读:
    二叉树的镜像
    Prototype 模式
    假如编程语言在一起聚餐
    从零开始——Ubuntu系统安装LAMP
    从零开始——Ubuntu系统配置与软件安装
    从零开始——制作Ubuntu系统U盘启动
    apt-get upgrade failure with libc
    再生龙Clonezilla备份Ubuntu系统
    Ubuntu上apache多端口配置虚拟主机的方法
    bash & Makefile & 正则表达式学习
  • 原文地址:https://www.cnblogs.com/zdzdbk/p/10969358.html
Copyright © 2011-2022 走看看