当前位置: 代码迷 >> 综合 >> TP5/5.1 小程序支付跨坑记录。
  详细解决方案

TP5/5.1 小程序支付跨坑记录。

热度:9   发布时间:2023-10-17 21:31:19.0
            //引用官方SDK,放置位置详见下面地址require_once '../extend/wxpay/lib/WxPay.Api.php';require_once '../extend/wxpay/example/WxPay.Config.php';//在里面配置好参数!!!$openId = db('users')->where('id', $userid)->value('openid');$order = $goods['order_number'];//这里我写的是订单号$money = $goods['total'] * 100;$config = new \WxPayConfig();//初始化值对象$input = new \WxPayUnifiedOrder();//文档提及的参数规范:商家名称-销售商品类目$input->SetBody("商家名称");//订单号应该是由小程序端传给服务端的,在用户下单时即生成,demo中取值是一个生成的时间戳$input->SetOut_trade_no("$order");$input->SetTime_start(date("YmdHis"));$input->SetTime_expire(date("YmdHis", time() + 600));//费用应该是由小程序端传给服务端的,在用户下单时告知服务端应付金额,$input->SetTotal_fee("$money");$input->SetNotify_url("回调地址自己写!!!");$input->SetTrade_type("JSAPI");//由小程序端传给服务端$input->SetOpenid($openId);//APPID小程序传过来 或者数据库读取。//向微信统一下单,并返回order,它是一个array数组$order = \WxPayApi::unifiedOrder($config, $input);if ($order['return_code'] == 'SUCCESS') {$info = array('appId' => $order['appid'],'timeStamp' => "" . time() . "",'nonceStr' => $order['nonce_str'],'package' => 'prepay_id=' . $order['prepay_id'],'signType' => 'MD5',);$info['paySign'] = $this->sign($info);//验签!!关键!!!!!!// json化返回给小程序端// header("Content-Type: application/json");return json($info);} else {return json(['msg' => 'fail']);}

关键!!!验签方法!! 

    public function sign($data, $key = '这里是支付APIKEY,必填!!!'){ksort($data);$buff = '';foreach ($data as $k => $v) {if ($k != "sign" && $v != "" && !is_array($v)) {$buff .= $k . "=" . $v . "&";}}$buff = trim($buff, "&");$string = $buff . "&key=" . $key;$string = md5($string);$sign = strtoupper($string);return $sign;}

以上。

  相关解决方案