微信小程序支付功能--优化
来源:互联网 发布:美女网络名字大全 编辑:程序博客网 时间:2024/06/10 10:08
//增加订单public function order_pay(Request $request){ $data = [ 'express' => $request->input('express'), 'express_id' => $request->input('express_id'), 'openid' => $request->input('openid'), 'express_sn' => $request->input('express_sn'), 'take_number' => $request->input('take_number'), 'price' => $request->input('price'), ]; is_empty_array_data($data); $data['out_trade_no'] =md5(uniqid() . microtime()); $order_info= OrderModel::create($data); $order_id=$order_info->getQueueableId(); $this->getPaySign($order_id);}//获取支付需要的参数public function getPaySign($order_id){ //$order_id = 54 ; $order_info = OrderModel::find($order_id); $ip = $_SERVER["REMOTE_ADDR"]; $notify_url = 'http://'.$_SERVER['HTTP_HOST'].'/api/payok'; $pay_data= PayModel::find(1); $data = [ //'appid' => 'wxf0d27e41678c566c', 'appid' => $pay_data->app_id, 'body' => '快递下单消费', //'mch_id' => '1484855592', 'mch_id' => $pay_data->med_id, 'nonce_str' => md5(date('YmdHis') . time() . rand(1000, 9999)), 'notify_url' => $notify_url, 'openid' => $order_info->openid, 'out_trade_no' => $order_info->out_trade_no, 'spbill_create_ip' => $ip, 'total_fee' => ($order_info->price)*100, 'trade_type' => 'JSAPI' ]; //形成sign $string = $this->getSign($data).'key='.$pay_data->med_secect; $stringTemp = MD5($string); $sign = strtoupper($stringTemp); //准备请求prepay接口 $data['sign'] = $sign; $str_xml = "<xml>"; foreach ($data as $key => $val) { $str_xml .= "<" . $key . ">" . $val . "</" . $key . ">"; } $str_xml .= "</xml>"; $prepay_url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'; //请求接口并且解析xml $result = $this->xmlDecode($this->httpCurl($prepay_url,$str_xml)); if ($result['return_code'] !== 'SUCCESS' || $result['result_code'] !== 'SUCCESS') { return response()->json(['status'=>200,'msg'=>$result]); } $params = [ 'appId' => $data['appid'], 'nonceStr' => $data['nonce_str'], 'package' => 'prepay_id='.$result['prepay_id'], 'signType' => 'MD5', 'timeStamp' => (string)time() ]; //拼接前端需要参数 $stringxml = $this->getSign($params).'key='.$pay_data->med_secect; $stringxml = MD5($stringxml); $sign2 = strtoupper($stringxml); $pay_result['paySign'] = $sign2; $pay_result['timeStamp'] = $params['timeStamp']; $pay_result['nonceStr'] = $params['nonceStr']; $pay_result['package'] = $params['package']; $pay_result['signType'] = 'MD5'; return response()->json(['status'=>200,'msg'=>$pay_result]);}protected function getSign($arr){ ksort($arr); $string = ''; foreach ($arr as $k => $v) { if ($k != "sign" && $v != "" && !is_array($v)) { $string .= $k . "=" . $v . "&"; } } return $string;}protected function xmlDecode($xml){ $message = (array)simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); return $message;}protected function httpCurl($url,$data){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'Content-Type: text' ) ); $data = curl_exec($ch); curl_close($ch); return ($data);}
阅读全文
0 0
- 微信小程序支付功能--优化
- 微信小程序 支付功能
- 微信小程序支付功能 C# .NET开发
- 微信小程序支付功能 C# .NET开发
- 微信小程序具有在线支付功能
- 让你的微信小程序具有在线支付功能
- 4部分代码轻松实现微信小程序支付功能
- 微信小程序与内嵌网页交互实现支付功能
- 微信小程序-支付倒计时
- 微信小程序支付
- 微信小程序支付
- 微信小程序支付
- 微信小程序支付
- 微信小程序支付 java
- 微信小程序支付业务流程
- 微信小程序支付申请
- 微信小程序支付流程
- 微信小程序支付
- zookeeper 使用场景
- LeetCode:Best time to Buy and Sell Stock IV
- 【技术分享】node.js + postgres 从注入到Getshell
- MySQL的基本操作
- Merge into 详细介绍
- 微信小程序支付功能--优化
- RocketMQ源码简析
- 感知机的对偶形式
- oracle 多个实例互相切换实例
- Python学习笔记(2)- 字符串和数字
- spring bean加载--从缓存中获取bean
- 执行上下文和作用域链
- Linux下MySQL数据库常用基本操作 一
- Python时间模块之time