快捷搜索:  聪少  引流   微商

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

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

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

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

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

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

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

  支付具体流程为:后端通过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格式,前端转换为对象。

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

相关文章