当前位置:首页 > 技术文档 > 正文内容

小程序微信支付

admin9年前 (2017-01-24)技术文档1685

<?php

class JsAction extends  CommonAction {


        public function index(){

         load ( "@.jssdk" );

         $jssdk = new JSSDK("yourAppID", "yourAppSecret");

         $signPackage = $jssdk->GetSignPackage();

         $this->assign('js',$signPackage );

         $this->display();

        }

    public function getPackage(){

        /**统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口

             统一支付中以下参数从配置中获取,或由类自动生成,不需要用户填写

             微信支付统一下单接口文档:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=9_1*/

        $rand = md5(time() . mt_rand(0,1000));

        $param["appid"] = "yourAppSecret";

        $param["openid"] = $_SESSION["userInfo"]["wxID"];

        $param["mch_id"] = "商户ID";

        $param["nonce_str"] = $rand;

        $param["body"] = "测试支付";

        $param["out_trade_no"] = $_SESSION["userInfo"]["userID"].time();

        $param["total_fee"] = 1;

        $param["spbill_create_ip"] = $_SERVER["REMOTE_ADDR"];

        $param["notify_url"] = "http://www.xxx.com/xxx.php/Js/callback";

        $param["trade_type"] = "JSAPI";


       //签名算法:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=4_3

        $signStr = 'appid='.$param["appid"]."&body=".$param["body"]."&mch_id=".$param["mch_id"]."&nonce_str=".$param["nonce_str"]."&notify_url=".$param["notify_url"]."&openid=".$param["openid"]."&out_trade_no=".$param["out_trade_no"]."&spbill_create_ip=".$param["spbill_create_ip"]."&total_fee=".$param["total_fee"]."&trade_type=".$param["trade_type"];

        $signStr = $signStr."&key=youAPIkey";


        $param["sign"] = strtoupper(MD5($signStr));


        $data = '<xml>

                  <appid><![CDATA['.$param["appid"].']]></appid>

                  <openid><![CDATA['.$param["openid"].']]></openid>

                  <mch_id>'.$param["mch_id"].'</mch_id>

                  <nonce_str><![CDATA['.$param["nonce_str"].']]></nonce_str>

                  <body><![CDATA['.$param["body"].']]></body>

                  <out_trade_no><![CDATA['.$param["out_trade_no"].']]></out_trade_no>

                  <total_fee>'.$param["total_fee"].'</total_fee>

                  <spbill_create_ip><![CDATA['.$param["spbill_create_ip"].']]></spbill_create_ip>

                  <notify_url><![CDATA['.$param["notify_url"].']]></notify_url>

                  <trade_type><![CDATA['.$param["trade_type"].']]></trade_type>

                  <sign><![CDATA['.$param["sign"].']]></sign>

                </xml>';


        $postResult = myCurl("https://api.mch.weixin.qq.com/pay/unifiedorder",$data);

        $postObj = simplexml_load_string($postResult, 'SimpleXMLElement', LIBXML_NOCDATA);


        $msg = "".$postObj->return_msg;

        if($msg == "OK"){

            $result["timestamp"] = time();

            $result["nonceStr"] = "".$postObj->nonce_str;  //不加""拿到的是一个json对象

            $result["package"] = "prepay_id=".$postObj->prepay_id;

            $result["signType"] = "MD5";


           /**支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符

               备注:prepay_id 通过微信支付统一下单接口拿到,paySign 采用统一的微信支付 Sign 签名生成方法,注意这里 appId 也要参与签名,

               appId 与 config 中传入的 appId 一致,即最后参与签名的参数有appId, timeStamp, nonceStr, package, signType。*/

            $paySignStr = 'appId=wxd7c487b7a2d9bc65'.'&nonceStr='.$result["nonceStr"].'&package='.$result["package"].'&signType='.$result["signType"].'&timeStamp='.$result["timestamp"];

            $paySignStr = $paySignStr."&key=youAPIkey";


            $result["paySign"] = strtoupper(MD5($paySignStr));

            $this->ajaxReturn($result, "".$msg, 1);

        }else{

           $this->ajaxReturn("", "".$msg, 0);

        }

    }


    public function callback(){


    }

}


分享到:

扫描二维码推送至手机访问。

版权声明:本文由云河空间发布,如需转载请注明出处。

本文链接:http://yuyunhe.cn/index.php/post/222.html

分享给朋友:

“小程序微信支付” 的相关文章

php 使用curl模拟登录discuz以及模拟发帖

<?php $discuz_url = 'http://127.0.0.1/discuz/';//论坛地址 $login_url = $discuz_url .'logging.php?action=login...

dz第三方模块添加方法

dz第三方模块添加方法

使用dz做网站的朋友有时候会用到第三方模块专题,这就会遇到一个模块通信的问题,可是弄了半天就是“数据无法识别,请返回”, 也够雷人的,ok,这你就给大家分享下本人的一点经验,以供大家参考!dz第三方模块添加方法...

git的几个小技巧

git的几个小技巧

分享git的几个小技巧,后面会根据使用补充。目前包括git撤销本地修改、git回退到前n个版本、git多用户提交冲突解决、git 命令简化。欢迎大家补充^_*1、git撤销本地修改 Java git reset --hard origin/ma...

用php gettext库来开发多语言系统

用php gettext库来开发多语言系统

通常人们写程序时都是将文字写死在程序里的, 比如:echo "Hello World!";  ,假如要改成它国语言,写国际化程序,就要逐个打开进行修改,程序较短时还行,若程序有上万甚至更多,改起来就不是那么容易了。近来随着i18n的逐渐标 准化,我也来讲一讲在PHP中如...

jQuery编程的最佳实践

加载jQuery1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢。点击查看使用CDN的好处,点此查看一些主流的jQuery CDN地址。<script type="text/javascript" src="...

Discuz!二次开发必备知识——DZ程序文件目录含义

分类: DZ程序文件目录含义基于7.0的标准程序,部分与插件无关的文件不作说明文件颜色说明:红色:程序核心文件,修改这类文件时千万要注意安全!橙色:做插件几乎不会用到的文件,大概了解功能就可以了,其实我也不推荐修改这些文件绿色:函数类文件,许多功能强大的自定义函数可以调用这类文件来...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。