热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于今日头条小程序(字节跳动小程序)相关问题

上周突然遇到让开发今日头条小程序(字节跳动小程序)的需求,然后看了下文档发现真的简陋。而且文档有错别字。槽点有点多。但是和老版本的小程序相差不多,然后我就抱着试一试的心态,真的是试

上周突然遇到让开发今日头条小程序(字节跳动小程序)的需求,然后看了下文档发现真的简陋。而且文档有错别字。槽点有点多。但是和老版本的小程序相差不多,然后我就抱着试一试的心态,真的是试一试把微信小程序换了个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'].'×tamp='.$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格式,前端转换为对象。


推荐阅读
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 在Kohana 3框架中,实现最优的即时消息显示方法是许多开发者关注的问题。本文将探讨如何高效、优雅地展示flash消息,包括最佳实践和技术细节,以提升用户体验和代码可维护性。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • Keepalived 提供了多种强大且灵活的后端健康检查机制,包括 HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK 和 MISC_CHECK 等多种检测方法。这些健康检查功能确保了高可用性环境中的服务稳定性和可靠性。通过合理配置这些检查方式,可以有效监测后端服务器的状态,及时发现并处理故障,从而提高系统的整体性能和可用性。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • Java能否直接通过HTTP将字节流绕过HEAP写入SD卡? ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • Squaretest:自动生成功能测试代码的高效插件
    本文将介绍一款名为Squaretest的高效插件,该工具能够自动生成功能测试代码。使用这款插件的主要原因是公司近期加强了代码质量的管控,对各项目进行了严格的单元测试评估。Squaretest不仅提高了测试代码的生成效率,还显著提升了代码的质量和可靠性。 ... [详细]
  • 深入理解 Java 控制结构的全面指南 ... [详细]
  • 本文详细解析了微信服务端示例类的功能与应用。其中,`ClientResponseHandler` 类主要用于处理微信支付所需的响应数据,而 `TenpayHttpClient` 则是对 HTTP 请求(包括 GET 和 POST 方法)进行了封装,以便在内部调用时更加便捷和高效。这些工具类在实际开发中起到了关键作用,开发者无需深入了解其底层实现细节,即可轻松集成微信支付功能。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
author-avatar
chung
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有