字节跳动(今日头条)小程序支付

  • 开通支付
  • 官方参数组装
  • 小程序代码
  • 服务端
    • 支付宝支付
    • 微信H5支付
    • 支付宝回调
    • 微信H5支付回调

开通支付

开通支付就不做说明了,请直接查看官方文档:https://microapp.bytedance.com/dev/cn/mini-app/develop/open-capacity/payment/mini-app-pay-plugin-reference/application-for-payment

官方参数组装

具体看文档:https://microapp.bytedance.com/dev/cn/mini-app/develop/open-capacity/payment/tt.pay

小程序代码

 // 支付
run_pay(){let service_val = 3; // 1 收银台 3 微信  4 支付宝qrxs.get_fetch('https://api.*****.com/pay/pay.html', {'fee':1800,'service':service_val ,'openid':'N2****Xu'}, function (data) {let orderInfo = data.data; if (data.status === "success") {           tt.pay({orderInfo: orderInfo,service: service_val,getOrderStatus(res) { let { out_order_no } = res;return new Promise(function(resolve, reject) {// 商户前端根据 out_order_no 请求商户后端查询微信支付订单状态tt.request({url: "<your-backend-url>",success(res) {// 商户后端查询的微信支付状态,通知收银台支付结果resolve({ code: 0 | 1 | 2 | 3 | 9 });},fail(err) {reject(err);}});});},success(res) {console.log(res)if (res.code == 0) {// 支付成功处理逻辑,只有res.code=0时,才表示支付成功// 但是最终状态要以商户后端结果为准}},fail(res) {console.log(res)// 调起收银台失败处理逻辑}});}})},
  • 请求函数封装类

/*** 网络请求* @param options* @return {Promise}*/
var get_fetch = function (url, data, backFun, method = 'GET') {let that = this;let headerJson = {"QRXS-FROM":'xcx'};tt.request({url: url,data: data,header: headerJson,method: method,success: function (ret) {try {// console.log(ret.data);backFun(ret.data);} catch (error) {console.log(error);}},fail: function (msg, code) {console.log(code);console.log(msg);},complete: function () {}})
}

小程序代码就不做过多的说明了

服务端

/*** 今日头条小程序支付* @param array $data     订单数据 body、 total_amount ,out_trade_no 必须要* @param string $openid  字节跳动的openid* @param int $service   1 拉起小程序收银台  3 微信支付 4 支付宝支付* @param int $payid     后台支付商户命名,区分cps和自有* @return array*/
function creParamToutiao($data=[],$openid='N2**aXu',$service=1){$body = isset($data['body']) ? $data['body'] : '订单说明';$total_amount = isset($data['total_amount']) ? $data['total_amount'] : 0; // 订单金额 分$out_trade_no = isset($data['out_trade_no']) ? $data['out_trade_no'] : '订单号';$now = time();$risk_info  = get_client_ip();    //获取用户真实IP(我在这里写了一个获取IP的方法)$app_secret = 'u********xe';     //头条支付分配给业务方的支付秘钥$data = ["merchant_id" => "19*****42",          // 头条支付分配给商户的商户号'app_id' => "8******2",             // 头条支付分配给商户 app_id,用于获取加签秘钥信息。'sign_type' => "MD5",                   // 固定值:MD5。商户生成签名的算法类型"timestamp" => $now,                    // 发送请求的时间戳,精确到秒"version" => "2.0",                     // 固定值:2.0"trade_type" => "H5",                   // 固定值:H5"product_code" => "pay",                // 固定值:pay"payment_type" => "direct",             // 固定值:direct"currency" => "CNY",                    // 固定值: CNY。币种"total_amount" => $total_amount,        // 金额,整型,单位:分(不能有小数)'out_order_no' => $out_trade_no,        // 商户订单号"uid" => $openid,                       // 用户在商户侧唯一标志,长度:32 位"subject" => $body,                     // 商户订单名称;"body" => $body,                        // 商户订单详情"trade_time" => $now,                   // 下单时间戳,精确到秒"valid_time" => "300",                  // 订单有效时间(单位 秒)"notify_url" => "https://api.****.com/pay/pay.html", // 回调地址'wx_url' => '',          // 调用微信 H5 支付统一下单接口 返回的 mweb_url 字段值(请注意不要进行 urlencode)。 service=3 时必传'wx_type' => '',         // wx_url 非空时传 'MWEB'。wx_url 为空时,该字段不传'alipay_url' => '',      // 调用支付宝 App 支付所需的支付请求参数 service=4 时必传];// 说明:service=3|4 时,merchant_id, app_id, sign_type, sign, wx_url, alipay_url, wx_type 字段值必须是真实信息;// 其他字段传非空、符合格式要求内容即可,不强制要求是真实订单信息if($service == 3){ // 微信$wxDataArr = $this->cre_param_wxH5($total_amount,$body,$out_trade_no);$data["wx_url"]  = isset($wxDataArr['mweb_url']) ? $wxDataArr['mweb_url'] : '';       // 调用微信 H5 支付统一下单接口 返回的 mweb_url 字段值(请注意不要进行 urlencode)。 service=3 时必传$data["wx_type"]  = 'MWEB';  // wx_url 非空时传 'MWEB'。wx_url 为空时,该字段不传$data['notify_url'] = isset($wxDataArr['notify_url']) ? $wxDataArr['notify_url'] : '';}if($service == 4){ // 支付宝$alipayArr = $this->cre_param_alipay($total_amount,$body,$out_trade_no);$alipayStr = isset($alipayArr['alipayStr']) ? $alipayArr['alipayStr'] : '';$data['notify_url'] = isset($alipayArr['notify_url']) ? $alipayArr['notify_url'] : '';$data["alipay_url"]  = $alipayStr;  // 调用支付宝 App 支付所需的支付请求参数 service=4 时必传}$data["sign"] = $this->getSignContent($data , $app_secret);   //这里写了一个签名的方法$data["risk_info"]  = json_encode(['ip' => $risk_info]); // // 支付风控参数。序列化后的 JSON 结构字符串,JSON 结构如下:{ip: '用户外网IP'}return $data;
}/*** 字节跳动签名处理* @param $params* @param $charset* @return string*/
public function getSignContent($params , $app_secret='', $charset='UTF-8') {ksort($params);$stringToBeSigned = "";$i = 0;foreach ($params as $k => $v) {if(!isset($v) || $v === null || trim($v) === "" || "@" == substr($v, 0, 1)){continue;}// 转换成目标字符集if (!empty($v)) {$fileType = "UTF-8";if (strcasecmp($fileType, $charset) != 0) {$v = mb_convert_encoding($v, $charset, $fileType);}}if ($i == 0) {$stringToBeSigned .= "$k" . "=" . "$v";} else {$stringToBeSigned .= "&" . "$k" . "=" . "$v";}$i++;}unset ($k, $v);return md5($stringToBeSigned.$app_secret);
}

支付宝支付

 /*** 支付宝支付* @param int $total_amount  订单金额(分)* @param string $body  订单说明* @param string $out_trade_no // 订单号 * @return array*/
function cre_param_alipay($total_amount=0,$body='',$out_trade_no=''){// 进公帐    $version_path = 'qrxs_alipay_cert_new';$alipayconf = [ 'partner'    => '*****',   //合作者身份id'app_id' => '*****',   //appid'seller_id' => '*****',  //卖家账号];$notify_url = '/notify/alipay_new';  // 回调地址// 支付宝开始$total_fee_alip = $total_amount/100;$biz_content = ["timeout_express"=>"30m","product_code"=>"QUICK_MSECURITY_PAY","total_amount"=>"{$total_fee_alip}","subject"=>"{$body}","body"=>"{$body}","out_trade_no"=>"{$out_trade_no}",];$biz_content = json_encode($biz_content);$private_key_path = (getcwd()).'/'.$version_path . '/rsa_private_key.pem';$alipayParam = array('charset'=>'utf-8','biz_content'=>$biz_content,'method'=>'alipay.trade.app.pay',               // 接口名称'notify_url'=>$this->notify_host.$notify_url,    //支付完成通知地址'app_id'=>$alipayconf['app_id'],              //合作者身份id'sign_type'=>'RSA2','version'=>'1.0','timestamp'=>date('Y-m-d H:i:s'),);$alipayStr = $this->getParamSign($alipayParam,$private_key_path);$backData = ['alipayStr'=>$alipayStr ,'notify_url' =>$alipayParam['notify_url'],];return $backData;
}//支付宝参数签名
private function getParamSign($params = array(),$private_key_path=''){$tempEncode = "";foreach ($params as $k => $v){$tempEncode .= $k . '=' . urlencode($v) . '&';}$tempEncode = substr($tempEncode, 0, strlen($tempEncode)-1);if(get_magic_quotes_gpc()){$tempEncode = stripslashes($tempEncode);}// 签名ksort($params);$temp = "";foreach ($params as $k => $v){$temp .= $k . '=' . $v . '&';}$temp = substr($temp, 0, strlen($temp)-1);if(get_magic_quotes_gpc()){$temp = stripslashes($temp);}//支付宝RSA签名$priKey = file_get_contents($private_key_path);$res = openssl_get_privatekey($priKey);openssl_sign($temp, $sign, $res,OPENSSL_ALGO_SHA256);openssl_free_key($res);$sign = base64_encode($sign);    //base64编码return $tempEncode.'&sign='.urlencode($sign);
}

微信H5支付

/*** 微信H5支付* @param int $total_amount* @param string $body* @param string $out_trade_no* @param int $payid* @return array*/function cre_param_wxH5($total_amount=0,$body='',$out_trade_no=''){//使用统一支付接口$notify_url = $this->notify_host."/Notify/wx_h5_own.html";include_once "Application/Vendor/WxPayH5/WxPayPubHelper.php";$unifiedOrder = new \UnifiedOrder_pub();$unifiedOrder->setParameter("body","{$body}");//商品描述//自定义订单号,此处仅作举例$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号//转分$unifiedOrder->setParameter("total_fee","$total_amount");//总金额$unifiedOrder->setParameter("notify_url",$notify_url);//通知地址$unifiedOrder->setParameter("trade_type","MWEB");//交易类型 调用接口提交的交易类型,取值如下:JSAPI,NATIVE,APP,,H5支付固定传MWEB$result = $unifiedOrder->getResult();$mweb_url = $result['mweb_url'];$prepayid = $result['prepay_id'];$data = array("mweb_url"=>$mweb_url,'prepayid'=>$prepayid,'out_trade_no'=>$out_trade_no,'notify_url'=>$notify_url,);return $data;}

支付回调就不写了,支付宝 和微信h5支付的回调应该都比较熟悉了,回调都是一样的

支付宝回调

//支付宝支付回调接口 3.1.0新账号
public function alipay_new(){$this->alipay_config = array('partner'=> '*****',  //合作者身份id'private_key_path'=>(getcwd()).'/qrxs_alipay_cert_new/rsa_private_key.pem','ali_public_key_path'=>(getcwd()).'/qrxs_alipay_cert_new/alipay_public_key.pem','cacert'    => (getcwd()).'/qrxs_alipay_cert_new/cacert.pem','sign_type'    => '0001','input_charset' => 'utf-8','transport'    => 'http','seller_id'    => '*****',    //卖家账号'notify_url'    => '', // 回调域名);require_once LIB_PATH."/Event/alipay/alipay_notify_app.class.php";//计算得出通知验证结果$alipayNotify = new \AlipayNotify($this->alipay_config);$verify_result = $alipayNotify->verifyNotify();if($verify_result) {// 逻辑处理echo "success";} else {echo "fail";}
}

支付宝回调引用类:https://download.csdn.net/download/qq_23564667/12264188

微信H5支付回调

/*
* 微信h5 回调 cps* */
public function wx_h5_cps(){//使用通用通知接口include_once "Application/Xcx4/Vendor/WxPayH5/WxPayPubHelper.php";$notify = new \Notify_pub();//存储微信的回调$xml = $GLOBALS['HTTP_RAW_POST_DATA'];$notify->saveData($xml);//验证签名,并回应微信。if($notify->checkSign() == FALSE){$notify->setReturnParameter("return_code","FAIL");//返回状态码$notify->setReturnParameter("return_msg","签名失败");//返回信息}else{$notify->setReturnParameter("return_code","SUCCESS");//设置返回码}//==商户根据实际情况设置相应的处理流程,此处仅作举例=======if($notify->checkSign() == TRUE){$out_trade_no = $notify->data["out_trade_no"];//订单号$trade_no = $notify->data["transaction_id"];//微信支付订单号$result_code = $notify->data["result_code"];//业务结果$bank_type = $notify->data["bank_type"];//付款银行$is_subscribe = $notify->data["is_subscribe"];//是否关注公众号$openid = $notify->data["openid"];///支付成功 业务逻辑操作echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';}echo '<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
}

微信回调引用类:https://download.csdn.net/download/qq_23564667/12264153

字节跳动(今日头条)小程序支付、支付宝、微信支付完整版相关推荐

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

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

  2. 微信封杀今日头条小程序;英特尔敲定新 CEO;快手成央视春晚官方合作伙伴 | 雷锋早报...

    英特尔正式任命罗伯特·斯万为新任 CEO 1月31日据外媒消息,英特尔最终确认任命临时 CEO 罗伯特·斯万正式接任CEO一职. 此前受到英特尔前 CEO 科再奇丑闻影响,英特尔CEO临时由罗伯特·斯 ...

  3. 今日头条小程序内测!BAT早已收割,张一鸣还能分到羹吗?

    文:罗超,陶程亦有贡献 日前,一位开发者向"罗超频道"透露,其已受邀参加今日头条小程序内测,如果不出意外,今日头条小程序平台很快就会发布. 如果今日头条发布小程序,将是继BAT后, ...

  4. 字节跳动(今日头条),为何战斗力如此凶猛?

    字节跳动(今日头条),为何战斗力如此凶猛? 年前,一位久未联系的朋友问京杭君: 有没有研究过今日头条? 还有没有上升空间? 这位朋友在杭州阿里工作多年,后出来创业,有猎头联系他,今日头条要在杭州成立技 ...

  5. 2018字节跳动(今日头条那个)一面凉经

    2018字节跳动(今日头条那个)一面凉经 >> 注意:图片里面我的输入是有错误的(原谅我略菜) ' 1.CSS垂直居中.水平垂直居中PS:这个高度是宽度的50%没有思路,而且因为没有界面调 ...

  6. vue仿今日头条_字节跳动今日头条前端面经(4轮技术面+hr面)

    笔者读大三,前端小白一枚,正在准备春招,人生第一次面试,投了头条前端,总共经历了四轮技术面试和一轮hr面,不多说,直接上题 一面 自我介绍,然后问了为什么学习前端 算法:实现36进制转换 简述http ...

  7. 软件测试字节跳动头条项目面试,字节跳动|今日头条面试经验分享

    最近一直在找实习,历时1个月,投了无数被拒了无数终于拿到想要的offer了!最近在面腾讯,分享一下字节跳动今日头条的面试经验攒人品啦- P1-5:面试官问的问题 P6:总体感受 (面试问题我放在最后了 ...

  8. WordPress微信小程序,WordPress百度小程序,WordPressQQ小程序,WordPress今日头条小程序,WordPress抖音小程序,WordPress多端小程序

    WordPress微信小程序,WordPress百度小程序,WordPressQQ小程序,WordPress今日头条小程序,WordPress抖音小程序,WordPress多端小程序. WordPre ...

  9. 快手小店电脑版_微信PC版更新!支持在小程序中使用微信支付 | 一周资讯

    小程序1. 微信PC版更新,支持在小程序中使用微信支付.12月19日,微信PC端推出内测版2.7.2.73,新版本支持以下新功能:新增看一看精选内容,新的订阅号浏览体验,支持在小程序中使用微信支付.( ...

  10. jsapi支付签名_小程序开发之微信支付

    1. 小程序之微信支付 虽然我们现行的小程序版本中没有支付这块功能,但是作为移动互联网中非常重要的一个功能还是需要了解下(老版本的小程序中有微信支付相关的功能代码在serviceList.js中). ...

最新文章

  1. Luence简单实现1
  2. java 3des 32位密钥_3des,java_java 中32位秘钥长度的 3des加密方法?,3des,java - phpStudy...
  3. java –cp ./:_成为Java流大师–第3部分:终端操作
  4. 机器学习实现计算不规则图形面积_《图形编程技术学习》(五十八)用VS实现逐顶点的光照计算...
  5. pycharm关闭/开启代码补全/代码提示
  6. php留言板入门教程,一个php留言板实例
  7. Python读取excel文件数据并画柱状图
  8. R语言如何释放运行之后的内存?
  9. 【错误记录】安卓项目编译报错 ( offline mode 错误 )
  10. 照片模糊怎么办?教你简单三步瞬间修复照片清晰度!
  11. 普通计算机电缆,计算机电缆和普通电缆有什么区别吗?
  12. 如何利用网络技术赚钱的
  13. Win11宽带连接错误651怎么解决?
  14. Android关系型数据库应用——电话(短信)黑名单
  15. 李宏毅2022机器学习HW5解析
  16. mysql创建储存过程 输入学生名子_创建一个存储过程,给定某学生学号,要求查询出该学生的姓名,所选课程名和成绩.(SQL SERVER)...
  17. 更改tkinter的OptionMenu背景颜色和下拉菜单宽度
  18. 什么是高可用性_什么是高可用性| 第2部分
  19. [学习笔记]Min-25筛
  20. 2018年网上最靠谱的正规赚钱思路

热门文章

  1. ValueError: Input 0 of node ... was passed float from ... incompatible with expected float_ref.
  2. 项目管理网络图概念总结
  3. SMETA验厂咨询,Sedex验厂工厂的自检流程有哪些
  4. 龙芯电脑上架设网络学习管理系统Moodle
  5. Towards Characterizing the Behavior of LiDARs in Snowy Conditions
  6. 如何定向网件路由防火墙与URL
  7. 个人征信要良好,申请信用卡需注意哪些事项?
  8. 影创发布首款头手6DoF MR眼镜鸿鹄,搭载高通骁龙XR2平台
  9. 100部经典中国电影,你看过几部?
  10. linux怎样安装xz工具,linux xz解压工具