小程序支付问题

对于新手来说,支付确实让人头疼,我怎么不能拉起支付啊,怎么不能回调啊,回调的参数怎么接收啊。

接下来我来透彻的讲解一下。

1:下列参数分解表示:

                    $data["appid"] = "";

                    $data["body"] = "支付";

                    $data["mch_id"] = ""; //商户平台号

                    $data["nonce_str"] = $this->nonce_str();//随机数,会显示在下图

                    $data["notify_url"] = '';//回调地址。在当前控制器写回调方法,注意路径

                    $data["openid"] = xx;//付款人的openid

                    $data["out_trade_no"] = xxx;订单号

                    $data["spbill_create_ip"] = $request->ip();//当前请求的ip,用官方获取函数

                    $data["total_fee"] = 0.01 * 100;//付款的金额

                    $data["trade_type"] = "JSAPI";//支付的方式

                    $sign = $this->sign($data);//加密

                    $data['sign'] = $sign;

                    $xmldata = $this->xml($data);

                    $url = "https://api.mch.weixin.qq.com/pay/unifiedorder";

                    $res = $this->http_request($url, $xmldata);

                    $result = $this->getxml($res);

                    if ($result['RETURN_CODE'] == 'SUCCESS') {

                        $info['appId'] = '';

                        $info['timeStamp'] = xx;当前时间戳就可以

                        $info['nonceStr'] = $this->nonce_str();

                        $info['package'] = 'prepay_id=' . PREPAY_ID;//此处可以自己研究一下

                        $info['signType'] = 'MD5';

                        $info["paySign"] = $this->sign($info);

                        $callback_data = ['code' => 200, 'msg' => "获取成功", "data" => $info];

                    }else{

                        $callback_data = ['code' => 500, 'msg' => "获取失败", "data" => ''];

                    }

return json($callback_data);

2:http_request($url, $xmldata);

这部分是请求的数据,通过curl请求数据。复制就好了

function http_request($url,$rawData){

        $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,$rawData);

//        curl_setopt($ch,CURLOPT_HTTPHEADER,array('content-Type:text'));

        $data = curl_exec($ch);

        curl_close($ch);

        return $data;

    }

3:随机数---nonce_str

 function nonce_str(){

        $result = '';

        $str = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm';

        for($i = 0;$i< 32;$i++){

            $result .= $str[rand(0,48)];

        }

        return $result;

    }

4:getxml===获取xml

function getxml($xml){

        $p = xml_parser_create();

        xml_parse_into_struct($p,$xml,$index);

        xml_parser_free($p);

        $data = '';

        foreach($index as $key => $value){

            if($value['tag'] == "RETURN_CODE"){

                $data['RETURN_CODE'] = $value['value'];

            }

        }

        return $data;

    }


5:回调函数接收:

public function notify_url(){

        $receipt = file_get_contents("php://input");//可以写入日志自己接收的数据

        $post_data = $this->xmlToArray($receipt);

        $postSign = $post_data['sign'];

        $order_number = $post_data['out_trade_no'];// 订单可以查看一下数据库是否有这个订单

        if ($post_data['return_code'] == 'SUCCESS' && $postSign) {

                    if (//写入自己的逻辑) {

                        echo '<xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg></xml>';

                    }

                } else {

                    echo '<xml><return_code><![CDATA[FAIL]]></return_code> <return_msg><![CDATA[ERROR]]></return_msg></xml>';

                }

            } else {

                echo '<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> </xml>';

            }

        } else {

            // 写个日志记录

//            file_put_contents('wxpayerrorlog.txt', $post_data['return_code'] . PHP_EOL, FILE_APPEND);

            echo '微信支付失败';

        }

    }

    //xml转换成数组

    private function xmlToArray($xml) {

        libxml_disable_entity_loader(true);

        $data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);

        return $data;

    }



不太明白的地方,可以留言哦

:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容

  • 转载自:http://www.cnblogs.com/txw1958/archive/2013/01/19/286...
    php_bruce阅读 2,275评论 1 5
  • 引言 秋高气爽,天气转凉,正是学习工作做的好时候。(~ ̄▽ ̄)~~(~ ̄▽ ̄)~ 我是个phper最近在写微信支付...
    恩就是这个名阅读 7,971评论 2 15
  • cURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议和选项,如HTTP、FTP、TELNET等,能...
    司马东阳阅读 1,442评论 0 6
  • cURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议和选项,如HTTP、FTP、TELNET等,能...
    你很闹i阅读 332评论 0 1
  • 在马东有一片波斯菊,很美很漂亮,犹如一位温柔的小姑娘让你忍不住多看几眼。 波斯菊是一种秋菊,原产地墨西哥,种植...
    张琳同学阅读 553评论 1 2