QQ咨询 官方微信

添加微信好友

官方小程序

百度小程序

微信小程序

头条小程序

关于我们

抖音小程序

头条/抖音小程序担保支付

 admin  2022-04-27 15:48:10
首先把配置文件填写完整:
  1. // 支付相关配置 
  2.  
  3. private static $config = array( 
  4.  
  5.     'app_id'        => ''// App ID 
  6.  
  7.     'salt'          => ''// 支付密钥值 
  8.  
  9.     'notify_url'    => ''// 支付回调地址 
  10.  
  11.     'thirdparty_id' => ''// 第三方平台服务商 id,非服务商模式留空 
  12.  
  13. ); 

支付类封装相关方法:

method 描述
createOrder 下单支付
queryOrder 订单查询
notifyOrder 订单回调验证
createRefund 订单退款
queryRefund 退款查询
settle 分账请求
querySettle 分账查询

使用方法:
  1. <?php 
  2.  
  3. require_once('./vendor/autoload.php'); 
  4.  
  5.  
  6. $config = []; // 支付配置 
  7.  
  8. $order = [ 
  9.  
  10.     'order_sn' => time(), // 订单编号 
  11.  
  12.     'total_amount' => 1, // 订单金额(分) 
  13.  
  14.     'body' => '测试商品'// 商品名称 
  15.  
  16. ]; 
  17.  
  18.  
  19.  
  20. $wechat = new fengkui\Pay\Bytedance($config); 
  21.  
  22. $re = $wechat->createOrder($order); 
  23.  
  24. die(json_encode($re)); // JSON化直接返回小程序客户端 

如下代码是封装好的完整支付类文件(Bytedance.php), 可以根据自己需求随意修改,详细的使用方法后期会有文档:
  1. <?php 
  2.  
  3. /** 
  4.  
  5. * @Author: [FENG] <1161634940@qq.com> 
  6.  
  7. * @Date:   2020-05-13 17:02:49 
  8.  
  9. * @Last Modified by:   [FENG] <1161634940@qq.com> 
  10.  
  11. * @Last Modified time: 2021-06-15T17:06:18+08:00 
  12.  
  13. */ 
  14.  
  15. namespace fengkui\Pay; 
  16.  
  17.  
  18.  
  19. use fengkui\Supports\Http; 
  20.  
  21.  
  22.  
  23. /** 
  24.  
  25. * Bytedance 字节跳动支付 
  26.  
  27. * 小程序担保支付(V1) 
  28.  
  29. */ 
  30.  
  31. class Bytedance 
  32.  
  33.  
  34.     // 接口版本 
  35.  
  36.     const EDITON = 'v1'
  37.  
  38.  
  39.  
  40.     // 统一下订单管理 
  41.  
  42.     private static $ecpayUrl = 'https://developer.toutiao.com/api/apps/ecpay/'
  43.  
  44.     // 服务端预下单 
  45.  
  46.     private static $createOrderUrl = 'https://developer.toutiao.com/api/apps/ecpay/v1/create_order'
  47.  
  48.     // 订单查询 
  49.  
  50.     private static $queryOrderUrl = 'https://developer.toutiao.com/api/apps/ecpay/v1/query_order'
  51.  
  52.     // 退款 
  53.  
  54.     private static $createRefundUrl = 'https://developer.toutiao.com/api/apps/ecpay/v1/create_refund'
  55.  
  56.     // 查询退款 
  57.  
  58.     private static $queryRefundUrl = 'https://developer.toutiao.com/api/apps/ecpay/v1/query_refund'
  59.  
  60.     // 分账请求 
  61.  
  62.     private static $settleUrl = 'https://developer.toutiao.com/api/apps/ecpay/v1/settle'
  63.  
  64.     // 查询分账 
  65.  
  66.     private static $querySettleUrl = 'https://developer.toutiao.com/api/apps/ecpay/v1/query_settle'
  67.  
  68.     // 服务商进件 
  69.  
  70.     private static $addMerchantUrl = 'https://developer.toutiao.com/api/apps/ecpay/saas/add_merchant'
  71.  
  72.     // 分账方进件 
  73.  
  74.     private static $addSubMerchantUrl = 'https://developer.toutiao.com/api/apps/ecpay/saas/add_sub_merchant'
  75.  
  76.  
  77.  
  78.     // 支付相关配置 
  79.  
  80.     private static $config = array( 
  81.  
  82.         'app_id'        => ''// App ID 
  83.  
  84.         'salt'          => ''// 支付密钥值 
  85.  
  86.         'notify_url'    => ''// 支付回调地址 
  87.  
  88.         'thirdparty_id' => ''// 第三方平台服务商 id,非服务商模式留空 
  89.  
  90.     ); 
  91.  
  92.  
  93.  
  94.     /** 
  95.  
  96.      * [__construct 构造函数] 
  97.  
  98.      * @param [type] $config [传递支付相关配置] 
  99.  
  100.      */ 
  101.  
  102.     public function __construct($config=NULL){ 
  103.  
  104.         $config && self::$config = array_merge(self::$config, $config); 
  105.  
  106.     } 
  107.  
  108.  
  109.  
  110.     /** 
  111.  
  112.      * [createOrder 下单支付] 
  113.  
  114.      * @param  [type] $order [description] 
  115.  
  116.      * @return [type]        [description] 
  117.  
  118.      * $order = array( 
  119.  
  120.      *      'body'         => '', // 产品描述 
  121.  
  122.      *      'total_amount' => '', // 订单金额(分) 
  123.  
  124.      *      'order_sn'     => '', // 订单编号 
  125.  
  126.      * ); 
  127.  
  128.      */ 
  129.  
  130.     public static function createOrder($order) 
  131.  
  132.     { 
  133.  
  134.         $config = self::$config; 
  135.  
  136.         $params = [ 
  137.  
  138.             'app_id'        => $config['app_id'], // 是 小程序 AppID 
  139.  
  140.             'out_order_no'  => (string)$order['order_sn'], // 是 开发者侧的订单号, 同一小程序下不可重复 
  141.  
  142.             'total_amount'  => $order['total_amount'], // 是 支付价格; 接口中参数支付金额单位为[分] 
  143.  
  144.             'subject'       => $order['body'], // 是 商品描述; 长度限制 128 字节,不超过 42 个汉字 
  145.  
  146.             'body'          => $order['body'], // 是 商品详情 
  147.  
  148.             'valid_time'    => 3600 * 2, // 是 订单过期时间(秒); 最小 15 分钟,最大两天 
  149.  
  150.             // 'sign'          => '', // 是 开发者对核心字段签名, 签名方式见文档附录, 防止传输过程中出现意外 
  151.  
  152.             // 'cp_extra'      => '', // 否 开发者自定义字段,回调原样回传 
  153.  
  154.             // 'notify_url'    => $config['notify_url'], // 否 商户自定义回调地址 
  155.  
  156.             // 'thirdparty_id' => '', // 否 第三方平台服务商 id,非服务商模式留空 
  157.  
  158.             'disable_msg'   => 1, // 否 是否屏蔽担保支付的推送消息,1-屏蔽 0-非屏蔽,接入 POI 必传 
  159.  
  160.             // 'msg_page'      => '', // 否 担保支付消息跳转页 
  161.  
  162.             // 'store_uid'     => '', // 否 多门店模式下,门店 uid 
  163.  
  164.         ]; 
  165.  
  166.         !empty($order['cp_extra']) && $params['cp_extra'] = $order['cp_extra']; 
  167.  
  168.         !empty($config['notify_url']) && $params['notify_url'] = $config['notify_url']; 
  169.  
  170.         !empty($config['thirdparty_id']) && $params['thirdparty_id'] = $config['thirdparty_id']; 
  171.  
  172.         if (!empty($config['msg_page'])) { 
  173.  
  174.             $params['disable_msg'] = 0; 
  175.  
  176.             $params['msg_page'] = $config['msg_page']; 
  177.  
  178.         } 
  179.  
  180.  
  181.  
  182.         $params['sign'] = self::makeSign($params); 
  183.  
  184.         // dump($params);die; 
  185.  
  186.         $url = self::$createOrderUrl; 
  187.  
  188.         $response = Http::post($url, json_encode($params)); 
  189.  
  190.         $result = json_decode($response, true); 
  191.  
  192.         return $result; 
  193.  
  194.     } 
  195.  
  196.  
  197.  
  198.     /** 
  199.  
  200.      * [queryOrder 订单查询] 
  201.  
  202.      * @param  [type] $orderSn [开发者侧的订单号, 不可重复] 
  203.  
  204.      * @return [type]          [description] 
  205.  
  206.      */ 
  207.  
  208.     public static function queryOrder($orderSn) 
  209.  
  210.     { 
  211.  
  212.         $config = self::$config; 
  213.  
  214.         $params = [ 
  215.  
  216.             'app_id' => $config['app_id'], // 小程序 AppID 
  217.  
  218.             'out_order_no' => (string)$orderSn, // 开发者侧的订单号, 不可重复 
  219.  
  220.             // 'sign' => '', // 开发者对核心字段签名, 签名方式见文档, 防止传输过程中出现意外 
  221.  
  222.             // 'thirdparty_id' => '', // 服务商模式接入必传   第三方平台服务商 id,非服务商模式留空 
  223.  
  224.         ]; 
  225.  
  226.  
  227.  
  228.         !empty($config['thirdparty_id']) && $params['thirdparty_id'] = $config['thirdparty_id']; 
  229.  
  230.         $params['sign'] = self::makeSign($params); 
  231.  
  232.  
  233.  
  234.         $url = self::$queryOrderUrl; 
  235.  
  236.         $response = Http::post($url, json_encode($params)); 
  237.  
  238.         $result = json_decode($response, true); 
  239.  
  240.         return $result; 
  241.  
  242.     } 
  243.  
  244.  
  245.  
  246.     /** 
  247.  
  248.      * [notifyOrder 订单回调验证] 
  249.  
  250.      * @return [array] [返回数组格式的notify数据] 
  251.  
  252.      */ 
  253.  
  254.     public static function notifyOrder() 
  255.  
  256.     { 
  257.  
  258.         $data = $_POST; // 获取回调数据 
  259.  
  260.         $config = self::$config; 
  261.  
  262.         if (!$data || empty($data['msg'])) 
  263.  
  264.             die('暂无回调信息'); 
  265.  
  266.  
  267.  
  268.         $result = json_decode($data['msg'], true); // 进行签名验证 
  269.  
  270.         // 判断签名是否正确  判断支付状态 
  271.  
  272.         if ($result && $data['type']=='payment') { 
  273.  
  274.             return $data; 
  275.  
  276.         } else { 
  277.  
  278.             return false
  279.  
  280.         } 
  281.  
  282.     } 
  283.  
  284.  
  285.  
  286.     /** 
  287.  
  288.      * [createRefund 订单退款] 
  289.  
  290.      * @param  [type] $order [订单相关信息] 
  291.  
  292.      * @return [type]        [description] 
  293.  
  294.      * $order = array( 
  295.  
  296.      *      'order_sn'     => '', // 订单编号 
  297.  
  298.      *      'refund_sn'    => '', // 退款编号 
  299.  
  300.      *      'total_amount' => '', // 订单金额(分) 
  301.  
  302.      *      'body'         => '', // 退款原因 
  303.  
  304.      * ); 
  305.  
  306.      */ 
  307.  
  308.     public static function createRefund($order) 
  309.  
  310.     { 
  311.  
  312.         $config = self::$config; 
  313.  
  314.         $params = [ 
  315.  
  316.             'app_id'        => $config['app_id'], // 是   小程序 id 
  317.  
  318.             'out_order_no'  => (string)$order['order_sn'], // 是  商户分配订单号,标识进行退款的订单 
  319.  
  320.             'out_refund_no' => (string)$order['refund_sn'], // 是 商户分配退款号 
  321.  
  322.             'refund_amount' => $order['total_amount'], // 是  退款金额,单位[分] 
  323.  
  324.             'reason'        => $order['body'] ?? '用户申请退款'// 是  退款理由,长度上限 100 
  325.  
  326.             // 'cp_extra'      => '', // 否   开发者自定义字段,回调原样回传 
  327.  
  328.             // 'notify_url'    => '', // 否   商户自定义回调地址 
  329.  
  330.             // 'sign'          => '', // 是   开发者对核心字段签名, 签名方式见文档, 防止传输过程中出现意外 
  331.  
  332.             // 'thirdparty_id' => '', // 否,服务商模式接入必传 第三方平台服务商 id,非服务商模式留空 
  333.  
  334.             'disable_msg'   => 1, // 否   是否屏蔽担保支付消息,1-屏蔽 
  335.  
  336.             // 'msg_page'      => '', // 否   担保支付消息跳转页 
  337.  
  338.             // 'all_settle'    => '', // 否   是否为分账后退款,1-分账后退款;0-分账前退款。分账后退款会扣减可提现金额,请保证余额充足 
  339.  
  340.         ]; 
  341.  
  342.  
  343.  
  344.         !empty($order['cp_extra']) && $params['cp_extra'] = $order['cp_extra']; 
  345.  
  346.         !empty($order['all_settle']) && $params['all_settle'] = $order['all_settle']; 
  347.  
  348.         !empty($config['thirdparty_id']) && $params['thirdparty_id'] = $config['thirdparty_id']; 
  349.  
  350.         if (!empty($config['msg_page'])) { 
  351.  
  352.             $params['disable_msg'] = 0; 
  353.  
  354.             $params['msg_page'] = $config['msg_page']; 
  355.  
  356.         } 
  357.  
  358.  
  359.  
  360.         $params['sign'] = self::makeSign($params); 
  361.  
  362.  
  363.  
  364.         $url = self::$queryOrderUrl; 
  365.  
  366.         $response = Http::post($url, json_encode($params)); 
  367.  
  368.         $result = json_decode($response, true); 
  369.  
  370.         return $result; 
  371.  
  372.     } 
  373.  
  374.  
  375.  
  376.     /** 
  377.  
  378.      * [queryRefund 退款查询] 
  379.  
  380.      * @param  [type] $refundSn [开发者侧的订单号, 不可重复] 
  381.  
  382.      * @return [type]           [description] 
  383.  
  384.      */ 
  385.  
  386.     public static function queryRefund($refundSn) 
  387.  
  388.     { 
  389.  
  390.         $config = self::$config; 
  391.  
  392.         $params = [ 
  393.  
  394.             'app_id' => $config['app_id'], // 小程序 AppID 
  395.  
  396.             'out_refund_no' => $refundSn, // 开发者侧的退款号 
  397.  
  398.             // 'sign' => '', // 开发者对核心字段签名, 签名方式见文档, 防止传输过程中出现意外 
  399.  
  400.             // 'thirdparty_id' => '', // 服务商模式接入必传   第三方平台服务商 id,非服务商模式留空 
  401.  
  402.         ]; 
  403.  
  404.  
  405.  
  406.         !empty($config['thirdparty_id']) && $params['thirdparty_id'] = $config['thirdparty_id']; 
  407.  
  408.         $params['sign'] = self::makeSign($params); 
  409.  
  410.  
  411.  
  412.         $url = self::$queryRefundUrl; 
  413.  
  414.         $response = Http::post($url, json_encode($params)); 
  415.  
  416.         $result = json_decode($response, true); 
  417.  
  418.         return $result; 
  419.  
  420.     } 
  421.  
  422.  
  423.  
  424.     /** 
  425.  
  426.      * [notifyRefund 退款回调验证] 
  427.  
  428.      * @return [array] [返回数组格式的notify数据] 
  429.  
  430.      */ 
  431.  
  432.     public static function notifyRefund() 
  433.  
  434.     { 
  435.  
  436.         $data = $_POST; // 获取回调数据 
  437.  
  438.         $config = self::$config; 
  439.  
  440.         if (!$data || empty($data['status'])) 
  441.  
  442.             die('暂无回调信息'); 
  443.  
  444.  
  445.  
  446.         $result = json_decode($data['msg'], true); // 进行签名验证 
  447.  
  448.         // 判断签名是否正确  判断支付状态 
  449.  
  450.         if ($result && $data['status']!='FAIL') { 
  451.  
  452.             return $data; 
  453.  
  454.         } else { 
  455.  
  456.             return false
  457.  
  458.         } 
  459.  
  460.     } 
  461.  
  462.  
  463.  
  464.     /** 
  465.  
  466.      * [settle 分账请求] 
  467.  
  468.      * @param  [type] $order [分账信息] 
  469.  
  470.      * @return [type]        [description] 
  471.  
  472.      * $order = array( 
  473.  
  474.      *      'body'         => '', // 产品描述 
  475.  
  476.      *      'total_amount' => '', // 订单金额(分) 
  477.  
  478.      *      'order_sn'     => '', // 订单编号 
  479.  
  480.      * ); 
  481.  
  482.      */ 
  483.  
  484.     public static function settle($order) 
  485.  
  486.     { 
  487.  
  488.         $config = self::$config; 
  489.  
  490.         $params = [ 
  491.  
  492.             'app_id'        => $config['app_id'], // 是 小程序 AppID 
  493.  
  494.             'out_order_no'  => (string)$order['order_sn'], // 是 商户分配订单号,标识进行结算的订单 
  495.  
  496.             'out_settle_no' => (string)$order['settle_sn'], // 是 开发者侧的结算号, 不可重复 
  497.  
  498.             'settle_desc'   => $order['body'], // 是  结算描述,长度限制 80 个字符 
  499.  
  500.             // 'cp_extra'      => '', // 否   开发者自定义字段,回调原样回传 
  501.  
  502.             // 'notify_url'    => '', // 否   商户自定义回调地址 
  503.  
  504.             // 'sign'          => '', // 是   开发者对核心字段签名, 签名方式见文档, 防止传输过程中出现意外 
  505.  
  506.             // 'thirdparty_id' => '', // 否,服务商模式接入必传 第三方平台服务商 id,非服务商模式留空 
  507.  
  508.             // 'settle_params' => '', // 否,其他分账方信息,分账分配参数 SettleParameter 数组序列化后生成的 json 格式字符串 
  509.  
  510.         ]; 
  511.  
  512.  
  513.  
  514.         !empty($order['cp_extra']) && $params['cp_extra'] = $order['cp_extra']; 
  515.  
  516.         !empty($order['settle_params']) && $params['settle_params'] = $order['settle_params']; 
  517.  
  518.         !empty($config['thirdparty_id']) && $params['thirdparty_id'] = $config['thirdparty_id']; 
  519.  
  520.         $params['sign'] = self::makeSign($params); 
  521.  
  522.  
  523.  
  524.         $url = self::$settleUrl; 
  525.  
  526.         $response = Http::post($url, json_encode($params)); 
  527.  
  528.         $result = json_decode($response, true); 
  529.  
  530.         return $result; 
  531.  
  532.     } 
  533.  
  534.  
  535.  
  536.     /** 
  537.  
  538.      * [querySettle 分账查询] 
  539.  
  540.      * @param  [type] $settleSn [开发者侧的订单号, 不可重复] 
  541.  
  542.      * @return [type]          [description] 
  543.  
  544.      */ 
  545.  
  546.     public static function querySettle($settleSn) 
  547.  
  548.     { 
  549.  
  550.         $config = self::$config; 
  551.  
  552.         $params = [ 
  553.  
  554.             'app_id' => $config['app_id'], // 小程序 AppID 
  555.  
  556.             'out_settle_no' => $settleSn, // 开发者侧的分账号 
  557.  
  558.             // 'sign' => '', // 开发者对核心字段签名, 签名方式见文档, 防止传输过程中出现意外 
  559.  
  560.             // 'thirdparty_id' => '', // 服务商模式接入必传   第三方平台服务商 id,非服务商模式留空 
  561.  
  562.         ]; 
  563.  
  564.  
  565.  
  566.         !empty($config['thirdparty_id']) && $params['thirdparty_id'] = $config['thirdparty_id']; 
  567.  
  568.         $params['sign'] = self::makeSign($params); 
  569.  
  570.  
  571.  
  572.         $url = self::$querySettleUrl; 
  573.  
  574.         $response = Http::post($url, json_encode($params)); 
  575.  
  576.         $result = json_decode($response, true); 
  577.  
  578.         return $result; 
  579.  
  580.     } 
  581.  
  582.  
  583.  
  584.     /** 
  585.  
  586.      * [notifySettle 分账回调验证] 
  587.  
  588.      * @return [array] [返回数组格式的notify数据] 
  589.  
  590.      */ 
  591.  
  592.     public static function notifySettle() 
  593.  
  594.     { 
  595.  
  596.         $data = $_POST; // 获取回调数据 
  597.  
  598.         $config = self::$config; 
  599.  
  600.         if (!$data || empty($data['status'])) 
  601.  
  602.             die('暂无回调信息'); 
  603.  
  604.  
  605.  
  606.         $result = json_decode($data['msg'], true); // 进行签名验证 
  607.  
  608.         // 判断签名是否正确  判断支付状态 
  609.  
  610.         if ($result && $data['status']!='FAIL') { 
  611.  
  612.             return $data; 
  613.  
  614.         } else { 
  615.  
  616.             return false
  617.  
  618.         } 
  619.  
  620.     } 
  621.  
  622.  
  623.  
  624.     /** 
  625.  
  626.      * [addMerchant 服务商进件] 
  627.  
  628.      * @param [type]  $accessToken [授权码兑换接口调用凭证] 
  629.  
  630.      * @param [type]  $componentId [小程序第三方平台应用] 
  631.  
  632.      * @param integer $urlType     [链接类型:1-进件页面 2-账户余额页] 
  633.  
  634.      */ 
  635.  
  636.     public static function addMerchant($accessToken, $componentId, $urlType=1) 
  637.  
  638.     { 
  639.  
  640.         $params = [ 
  641.  
  642.             'component_access_token' => $accessToken, // 是   授权码兑换接口调用凭证 
  643.  
  644.             'thirdparty_component_id' => $componentId, // 是  小程序第三方平台应用 id 
  645.  
  646.             'url_type' => $urlType, // 是 链接类型:1-进件页面 2-账户余额页 
  647.  
  648.         ]; 
  649.  
  650.  
  651.  
  652.         $url = self::$addMerchantUrl; 
  653.  
  654.         $response = Http::post($url, json_encode($params)); 
  655.  
  656.         $result = json_decode($response, true); 
  657.  
  658.         return $result; 
  659.  
  660.     } 
  661.  
  662.  
  663.  
  664.     /** 
  665.  
  666.      * [addSubMerchant 分账方进件] 
  667.  
  668.      * @param [type]  $thirdpartyId [小程序第三方平台应用] 
  669.  
  670.      * @param [type]  $merchantId   [商户 id,用于接入方自行标识并管理进件方。由服务商自行分配管理] 
  671.  
  672.      * @param integer $urlType      [链接类型:1-进件页面 2-账户余额页] 
  673.  
  674.      */ 
  675.  
  676.     public static function addSubMerchant($thirdpartyId, $merchantId, $urlType=1) 
  677.  
  678.     { 
  679.  
  680.         $params = [ 
  681.  
  682.             'thirdparty_id' => $thirdpartyId, // 是   小程序第三方平台应用 id 
  683.  
  684.             'sub_merchant_id' => $merchantId, // 是   商户 id,用于接入方自行标识并管理进件方。由服务商自行分配管理 
  685.  
  686.             'url_type' => $urlType, // 是 链接类型:1-进件页面 2-账户余额页 
  687.  
  688.             // 'sign' => '', // 开发者对核心字段签名, 签名方式见文档, 防止传输过程中出现意外 
  689.  
  690.         ]; 
  691.  
  692.  
  693.  
  694.         $params['sign'] = self::makeSign($params); 
  695.  
  696.  
  697.  
  698.         $url = self::$addSubMerchantUrl; 
  699.  
  700.         $response = Http::post($url, json_encode($params)); 
  701.  
  702.         $result = json_decode($response, true); 
  703.  
  704.         return $result; 
  705.  
  706.     } 
  707.  
  708.  
  709.  
  710.     /** 
  711.  
  712.      * [success 通知状态] 
  713.  
  714.      */ 
  715.  
  716.     public static function success() 
  717.  
  718.     { 
  719.  
  720.         $array = ['err_no'=>0, 'err_tips'=>'success']; 
  721.  
  722.         die(json_encode($array)); 
  723.  
  724.     } 
  725.  
  726.  
  727.  
  728.     /** 
  729.  
  730.      * [makeSign 生成秘钥] 
  731.  
  732.      * @param  [type] $data [加密数据] 
  733.  
  734.      * @return [type]       [description] 
  735.  
  736.      */ 
  737.  
  738.     public static function makeSign($data) { 
  739.  
  740.         $config = self::$config; 
  741.  
  742.         $rList = array(); 
  743.  
  744.         foreach($data as $k => $v) { 
  745.  
  746.             if ($k == "other_settle_params" || $k == "app_id" || $k == "sign" || $k == "thirdparty_id"
  747.  
  748.                 continue
  749.  
  750.             $value = trim(strval($v)); 
  751.  
  752.             $len = strlen($value); 
  753.  
  754.             if ($len > 1 && substr($value, 0,1)=="\"" && substr($value,$len, $len-1)=="\""
  755.  
  756.                 $value = substr($value,1, $len-1); 
  757.  
  758.             $value = trim($value); 
  759.  
  760.             if ($value == "" || $value == "null"
  761.  
  762.                 continue
  763.  
  764.             array_push($rList, $value); 
  765.  
  766.         } 
  767.  
  768.         array_push($rList, $config['salt']); 
  769.  
  770.         sort($rList, 2); 
  771.  
  772.         return md5(implode('&', $rList)); 
  773.  
  774.     } 
  775.  
  776.  
  777.  

我自己实际操作的代码分享:

下单:
  1. //新版本担保交易 
  2.         public function createOrder($orderid,$price,$subject,$body,$openid,$notifyUrl){ 
  3.             $time = time(); 
  4.             $price = $price*100; 
  5.             $data = [ 
  6.                 'app_id' => $this->ttAppid, 
  7.                 'out_order_no' =>  $orderid, //订单号 
  8.                 'total_amount' => $price,  //金额 单位:分 
  9.                 'body' => $body,           //支付的内容 
  10.                 'subject' => $subject,     //支付的标题 
  11.                 'valid_time' => 3600, 
  12.                 'notify_url'=> $notifyUrl, 
  13.             ]; 
  14.             $data['sign'] = $this->MakeSign($data); 
  15.             $url = "https://developer.toutiao.com/api/apps/ecpay/v1/create_order"; // 请求地址正式环境 
  16.             $result = $this->curlPost($url, $data); 
  17.             echo $result; 
  18.             exit(); 
  19.             return json_decode($result,true); 
  20.         } 
签名:
  1. /** 
  2.          * 生成签名 
  3.          *  @return 签名 
  4.          */ 
  5.         public function MakeSign( $params ){ 
  6.             $rList = array(); 
  7.             foreach($params as $k =>$v) { 
  8.                 if ($k == "other_settle_params" || $k == "app_id" || $k == "sign" || $k == "thirdparty_id"
  9.                     continue
  10.                 $value = trim(strval($v)); 
  11.                 $len = strlen($value); 
  12.                 if ($len > 1 && substr($value, 0,1)=="\"" && substr($value,$len, $len-1)=="\""
  13.                     $value = substr($value,1, $len-1); 
  14.                 $value = trim($value); 
  15.                 if ($value == "" || $value == "null"
  16.                     continue
  17.                 array_push($rList, $value); 
  18.             } 
  19.             array_push($rList, $this->ttPayAppSecret); 
  20.             sort($rList, 2); 
  21.             return md5(implode('&', $rList)); 
  22.         } 
回调及验签:
  1. //回调 
  2.         public function notify($notify) 
  3.         { 
  4.             if ($notify['msg_signature'] !== $this->getNotifySign($notify)) { 
  5.                return false
  6.             }  
  7.             return true
  8.         } 
  9.  
  10.         /** 
  11.          * 回调验签 
  12.          */ 
  13.         public function getNotifySign($body){ 
  14.             $filtered = []; 
  15.             foreach ($body as $key => $value) { 
  16.                 if (in_array($key, ['msg_signature''type'])) { 
  17.                     continue
  18.                 } 
  19.                 $filtered[] = is_string($value) ? trim($value): $value; 
  20.             } 
  21.             $filtered[] = trim($this->ttPayAppSecret); 
  22.             sort($filtered, SORT_STRING); 
  23.             $filtered = trim(implode('', $filtered)); 
  24.             return sha1($filtered); 
  25.         } 

本文《头条/抖音小程序担保支付》发布于石头博客文章,作者:admin,如若转载,请注明出处:https://www.pweb123.com/xiaocheng/douyin/840.html,否则禁止转载,谢谢配合!
上一篇:第一页
下一篇:最后一页

您可能感兴趣

文章点评

我来说两句 已有1条评论
点击图片更换
石头博客网友 2022-06-02 10:19:33
回复 支持0
经过测试是可以直接使用的
小程序插件

PHPcms小程序插件

phpcms小程序插件万能接口,支持一键授权登录

Pbootcms小程序插件

Pbootcms小程序插件,支持一键授权登录

迅睿cms小程序插件

xunruicms小程序插件,简单易学,专为小白设计

dedecms小程序插件

不需要php基础,只需要div+css就可,方便简单

添加微信好友

添加微信好友

微信小程序

百度小程序