微信小程序支付功能--优化
2017-11-09 17:45
543 查看
//增加订单 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); }
相关文章推荐
- 微信小程序实现支付功能
- 微信小程序 支付功能(前端)的实现
- 4部分代码轻松实现微信小程序支付功能
- 微信小程序支付功能 C# .NET开发
- Android中微信小程序支付倒计时功能
- 微信小程序 支付功能
- 微信小程序与内嵌网页交互实现支付功能
- 巧用日志功能,进行微信h5支付开发,微信公众号开发,小程序支付开发错误调试——微信h5支付开发3
- 微信小程序支付功能 php后台对接完整代码分享
- 微信小程序 支付功能开发错误总结
- 微信小程序 --- 完成小程序支付功能
- 微信小程序 支付功能实现PHP实例详解
- 微信小程序支付功能 C# .NET开发
- 微信小程序在线支付功能使用总结
- C# .NET 微信小程序 支付功能开发
- 微信小程序支付功能 C# .NET开发
- 微信小程序实现表单校验功能
- 微信小程序 openid及支付的若干问题解决方案
- 微信小程序商城版 java接口登录支付增删改查检索分页,支持的顶一下