前端html頁面:
前端js頁面:
submitOrder: function () {
? ? ? ? ? ? ??? ? let _this=this;
? ?????????????? App._get('pay/answer_payment', {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? open_id: _this.data.open_id,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? total_price: _this.data.total_price,?
? ?????????????? },
? ? ? ? ? ? ? ?? function (result) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? var data=result;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? console.log(data);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? //? 發(fā)起微信支付
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? wx.requestPayment({
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? timeStamp: data['timeStamp'],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? nonceStr: data['nonceStr'],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? package: data['package'],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?? ? signType: 'MD5',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? paySign: data['paySign'],
? ? ? ??????????????????????????????????????? success: function (res) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? App._get('book/orderSave',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? user_id: _this.data.user_id,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? book_id: _this.data.book_id,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? book_content: _this.data.book_content,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? cost: _this.data.total_price,
? ? ? ? ? ? ??????????????????????????????????????????????????????? out_trade_no: data['out_trade_no'],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }? ? function (result) {
?????????????????????????????????????????????????????????????????????? 保存訂單成功;
?????????????????????????????????????????????????????????????? });
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? App._get('book/mybook',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? {
? ? ? ? ? ? ????????????????????????????????????????????????????????? user_id: _this.data.user_id,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? book_id: _this.data.book_id,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? },
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? function (result) {
????????????????????????????????????????????????????????????????????? 加入書包成功;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? });
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? wx.navigateBack();?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? fail: function () {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? App.showError('訂單未支付', function () {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? });
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ?? });
????????? });
? },
后臺開發(fā)者服務器代碼:
public function answer_payment(){
? ? ? ? $open_id = $_GET['open_id'];
? ? ? ? $total_price = $_GET['total_price'];
? ? ? ? $fee = $total_price;//支付費用
? ? ? ? $appid = 'wxdebe20dae6829f79';
? ? ? ? $body = '書云';
? ? ? ? $mch_id =? '1541638811';? //商戶號
? ? ? ? $nonce_str =? ? $this->nonce_str();//隨機字符串
? ? ? ? $notify_url =? 'https://www.weixin.qq.com/wxpay/notify.php'; //回調的url
? ? ? ? $openid = $open_id;
? ? ? ? $out_trade_no = $this->order_number($open_id);//商戶訂單號
? ? ? ? $spbill_create_ip ='101.132.72.105';
? ? ? ? $total_fee =? ? $fee*100;// 微信支付單位是分谅阿,所以這里需要*100
? ? ? ? $trade_type = 'JSAPI';//交易類型 默認
? ? ? ? $post['appid'] = $appid;
? ? ? ? $post['body'] = $body;
? ? ? ? $post['mch_id'] = $mch_id;
? ? ? ? $post['nonce_str'] = $nonce_str;//隨機字符串
? ? ? ? $post['notify_url'] = $notify_url;
? ? ? ? $post['openid'] = $openid;
? ? ? ? $post['out_trade_no'] = $out_trade_no;
? ? ? ? $post['spbill_create_ip'] = $spbill_create_ip;//終端的ip
? ? ? ? $post['total_fee'] = $total_fee;//總金額? ? ? ? $post['trade_type'] = $trade_type;
? ? ? ? $sign = $this->sign($post);//簽名
? ? ? ? $post_xml = '
? ? ? ? ? ?<appid>'.$appid.'
? ? ? ? ? ?<body>'.$body.'
? ? ? ? ? ?<mch_id>'.$mch_id.'
? ? ? ? ? ?<nonce_str>'.$nonce_str.'
? ? ? ? ? ?<notify_url>'.$notify_url.'
? ? ? ? ? ?<openid>'.$openid.'
? ? ? ? ? ?<out_trade_no>'.$out_trade_no.'
? ? ? ? ? ?<spbill_create_ip>'.$spbill_create_ip.'
? ? ? ? ? ?<total_fee>'.$total_fee.'
? ? ? ? ? ?<trade_type>'.$trade_type.'
? ? ? ? ? ?<sign>'.$sign.'
? ? ? ? </xml> ';
? ? ? ? $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
? ? ? ? $xml = $this->http_request($url,$post_xml);
? ? ? ? $array = $this->fromXml($xml);
? ? ? ? //var_dump($array);
? ? ? ? if($array['return_code'] == 'SUCCESS' && $array['return_code'] == 'SUCCESS'){
? ? ? ? ? ? $time = time();
? ? ? ? ? ? $tmp=array();//臨時數組用于簽名
? ? ? ? ? ? $tmp['appId'] = $appid;
? ? ? ? ? ? $tmp['nonceStr'] = $nonce_str;
? ? ? ? ? ? $tmp['package'] = 'prepay_id='.$array['prepay_id'];
? ? ? ? ? ? $tmp['signType'] = 'MD5';
? ? ? ? ? ? $tmp['timeStamp'] = "$time";
? ? ? ? ? ? $data['state'] = 200;
? ? ? ? ? ? $data['timeStamp'] = "$time";//時間戳
? ? ? ? ? ? $data['nonceStr'] = $nonce_str;//隨機字符串
? ? ? ? ? ? $data['signType'] = 'MD5';//簽名算法
? ? ? ? ? ? $data['package'] = 'prepay_id='.$array['prepay_id'];//統(tǒng)一下單接口返回的 prepay_id 參數值,提交格式如:prepay_id=*
? ? ? ? ? ? $data['paySign'] = $this->sign($tmp);//簽名
? ? ? ? ? ? $data['out_trade_no'] = $out_trade_no;
? ? ? ? }else{
? ? ? ? ? ? $data['state'] = 0;
? ? ? ? ? ? $data['text'] = "錯誤";
? ? ? ? ? ? $data['RETURN_CODE'] = $array['result_code'];
? ? ? ? ? ? $data['RETURN_MSG'] = $array['return_msg'];
? ? ? ? }
? ? ? echo json_encode($data);
? ? }
? ? //隨機32位字符串
? ? private function nonce_str(){
? ? ? ? $result = '';
? ? ? ? $str = 'QWERTYUIOPASDFGHJKLZXVBNMqwertyuioplkjhgfdsamnbvcxz';
? ? ? ? for ($i=0;$i<32;$i++){
? ? ? ? ? $result .= $str[rand(0,48)];
? ? ? ? }
? ? ? ? return $result;
? ? }
? ? private function order_number($openid){
? ? ? ? return date('Ymd',time()).time().rand(10,99);//18位
? ? ? ? //return md5($openid.time().rand(10,99));//32位
? ? }
? ? //簽名 $data要先排好順序
? ? private function sign($data){
? ? ? ? $stringA = '';
? ? ? ? foreach ($data as $key=>$value){
? ? ? ? ? ? if(!$value) continue;
? ? ? ? ? ? if($stringA) $stringA .= '&'.$key."=".$value;
? ? ? ? ? ? else $stringA = $key."=".$value;
? ? ? ? }
? ? ? ? $wx_key = 'cdsykjyxgs1688510107199101244217';
? ? ? ? $stringSignTemp = $stringA.'&key='.$wx_key;
? ? ? ? return strtoupper(md5($stringSignTemp));
? ? }
? ? //curl請求
? ? public function http_request($url,$data = null,$headers=array())
{
? ? ? ? $curl = curl_init();
? ? ? ? if( count($headers) >= 1 ){
? ? ? ? curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
? ? ? ? }
? ? ? ? curl_setopt($curl, CURLOPT_URL, $url);
? ? ? ? curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
? ? ? ? curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
? ? ? ? if (!empty($data)){
? ? ? ? curl_setopt($curl, CURLOPT_POST, 1);
? ? ? ? curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
? ? ? ? }
? ? ? ? curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
? ? ? ? $output = curl_exec($curl);
? ? ? ? curl_close($curl);
? ? ? ? return $output;
? ? }
? ? //獲取xml
? ? private function xml($xml){
? ? ? ? $p = xml_parser_create();
? ? ? ? xml_parse_into_struct($p, $xml, $vals, $index);
? ? ? ? xml_parser_free($p);
? ? ? ? $data = "";
? ? ? ? foreach ($index as $key=>$value) {
? ? ? ? ? ? if($key == 'xml' || $key == 'XML') continue;
? ? ? ? ? ? $tag = $vals[$value[0]]['tag'];
? ? ? ? ? ? $value = $vals[$value[0]]['value'];
? ? ? ? ? ? $data[$tag] = $value;
? ? ? ? }
? ? ? ? return $data;
? ? }
? ? private function fromXml($xml)
{
? ? ? ? // 禁止引用外部xml實體
? ? ? ? libxml_disable_entity_loader(true);
? ? ? ? return json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
? ? }