<?php/*** 头条小程序对接微信、支付宝支付* 服务端获取OrderInfo* tt.pay 文档地址:* /docs/zh-CN/mini-app/develop/api/open-interface/payment/tt-pay*/function GetOrderInfo (){$order_id = $_POST['order_id'];//订单ID$service = $_POST['service'];//支付类型 1拉起小程序收银台,3微信 API 支付,4支付宝 API 支付$order = M('order')->where(['id'=>$order_id])->field('id,order_sn,title,money')->find();//订单信息$orderInfo = ['merchant_id' => C('BYTE_MERCHANT_ID'),//开发者后台支付设置页的商户号'app_id' => C('BYTE_APP_ID'),//开发者后台支付设置页的 app_id'sign_type' => 'MD5',//固定值:MD5。商户生成签名的算法类型'timestamp' => (string)time(),//发送请求的时间戳,精确到秒'version' => '2.0',//固定值:2.0'trade_type' => 'H5',//固定值:H5//'sign' => '',//签名,具体签名方案见 服务端签名'product_code' => 'pay',//固定值:pay'payment_type' => 'direct',//固定值:direct'out_order_no' => $order['order_sn'],//商户订单号'uid' => C('BYTE_APP_ID'),//固定值:同 app_id'total_amount' => $order['money'] * 100,//金额,整型,单位:分(不能有小数)'currency' => 'CNY',//固定值: CNY。币种'subject' => $order['title'],//商户订单名称'body' => $order['title'],//商户订单详情'trade_time' => (string)time(),//下单时间戳,精确到秒'valid_time' => '600',//订单有效时间(单位 秒)'notify_url' => 'https://tp-/paycallback',//固定值:https://tp-/paycallback//'alipay_url' =>'',//调用支付宝 App 支付所需的支付请求参数//'wx_url' =>'',//调用微信 H5 支付统一下单接口 返回的 mweb_url 字段值(请注意不要进行 urlencode)。//'wx_type' =>'',//wx_url 非空时传 'MWEB'。wx_url 为空时,该字段不传'risk_info' => json_encode(['ip'=>getIP()]),//支付风控参数。序列化后的 JSON 结构字符串,JSON 结构如下:{ip: '用户外网IP'}];if($service == 3){//获取微信H5支付的mweb_url(需自己对接)$wx_pay_url = get_wx_pay_url($order_id);$orderInfo['wx_url'] = $wx_pay_url;$orderInfo['wx_type'] = 'MWEB';}elseif ($service == 4){//获取支付宝App支付请求参数(需自己对接)$ali_pay_url = get_ali_pay_url($order_id);$orderInfo['alipay_url'] = $ali_pay_url;}$orderInfo['sign'] = get_tt_pay_sign($orderInfo,C('BYTE_APP_SECRET'));return $orderInfo;}/*** @desc 服务端签名* @param array $orderInfo 签名前的支付数据* @param string $app_secret 头条支付secret* @return string 签名结果字符串*/function get_tt_pay_sign(array $orderInfo, $app_secret){//1.去掉请求参数中 sign 与 risk_info 字段、value 为空的字段。foreach ($orderInfo as $k=>$v){if($k == 'sign' || $k == 'risk_info' || empty($v)){unset($orderInfo[$k]);}}//2.把筛选后的 k-v 集合按照 key 的 ASCII 码升序排序ksort($orderInfo);//3.k-v 按照 key=value 的格式链接,并且按照 key 排序使用 & 连接成一个字符串,生成待签名字符串$parts = [];foreach ($orderInfo as $k => $v) {$parts[] = $k . '=' . $v;}//4.待签名字符串$unsigned_str = implode('&', $parts);file_put_contents('unsigned_str.txt',$unsigned_str);//保存一下 支付自助校验时会用到//5.MD5 加签$sign = md5($unsigned_str.$app_secret);return $sign;}
1000字范文,内容丰富有趣,学习的好帮手!