• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >微信公众号 > 微信公众平台开发微信支付

微信公众平台开发微信支付

作者:匿名 字体:[增加 减小] 来源:互联网

匿名通过本文主要向大家介绍了微信开发等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一、JS-SDK

公众号中的微信支付需要通过JS来实现。微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。

1)引入JS脚本文件

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

2)通过config接口注入权限验证配置

<script>
    wx.config({
    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名
});
</script>

appId就是应用ID,wx打头的那串字符,timestamp在php中就用time()获取,而nonceStr就用uniqid()获取,而signature根据特定算法获取。

protected function getJsapiConfig()
    {
        $weixin = new Weixin();
        $ticketMongo = new WeixinJsapiTicket();
        $data = [
            'appId' => $weixin->getAppId(),
            'noncestr' => uniqid(),
            'jsapi_ticket' => $ticketMongo->getJsapiTicket(),
            'timestamp' => time()
        ];
        //拼装原始待签名串
        $src = [
            'noncestr=' . $data['noncestr'],
            'jsapi_ticket=' . $data['jsapi_ticket'],
            'timestamp=' . $data['timestamp']
        ];
        sort($src);
        $data['signature'] = sha1(implode('&', $src));
        return $data;
    }

这里说明下“jsapi_ticket”,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于有时间限制,而且获取jsapi_ticket的api调用次数非常有限,所以我会将获取到的jsapi_ticket保存到MongoDB中。

/**
     * 通过access_token获取jsapi_ticket
     * @param $access_token
     * @return string | null
     */
    public function getJsapiTicket($access_token)
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket';
        $param = [
        'access_token' => $access_token,
        'type' => 'jsapi'
                ];
        $res = $this->request($url, $param);
        $result = json_decode($res, true);
        if (isset($result['errcode']) && $result['errcode'] == 0 && isset($result['ticket'])) {
            return $result;
        }
        return null;
    }

3)通过ready接口处理成功验证

1)prepay_id是根据本地生成的订单号等获取的,订单号每次请求的得不一样,不然会报错的

2)nonceStr就用md5(uniqid('baiaimama'))获取

3)signType使用MD5

4)paySign根据代码的参数,排序后拼接获得。

wx.chooseWXPay({
    timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
    nonceStr: '', // 支付签名随机串,不长于 32 位
    package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
    signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
    paySign: '', // 支付签名
    success: function (res) {
        // 支付成功后的回调函数
    }
});

/**
     * 生成jsapi需要调用的参数
     */
    public function getJsapiParam(){
        $param = [
        'appId' => $this->APPID,
        'timeStamp' => time(),
        'nonceStr' => md5(uniqid('baiaimama')),
        'package' => 'prepay_id='.$this->param['prepay_id'],
        'signType' => 'MD5'
                ];
    
        $str = [];
        foreach($param as $k=>$v){
            if(!empty($v)){
                $str[] = "{$k}={$v}";
            }
        }
        sort($str);
        $unsignKey = join('&', $str).'&key='.$this->KEY;
        $sign = strtoupper(md5($unsignKey));
        $param['paySign'] = $sign;
        return $param;
    }

二、异步回调

异步回调中做些修改订单状态、发送短信,推送消息等操作。

/**
     * 微信支付异步回调API
     * 微信支付成功,会收到异步回调
     */
    public function actionWxpay()
    {    
        $weixinPay = new WeixinPay();
        $weixin = new Weixin();
        
        $xml = file_get_contents('php://input');
        $msg = $weixin->parseMsg($xml);
    
        //记录微信推送日志
        $notifyMongo = new WeixinPayNotify();
        $notifyMongo->logPayNotify($xml);

        if(!$msg || !is_object($msg)){
            $weixinPay->notifyXml('FAIL', '通知不合法');
        }
    
        if(!isset($msg->return_code) || $msg->return_code != 'SUCCESS'){
            $weixinPay->notifyXml('FAIL', '通信失败');
        }
    
        if(!isset($msg->result_code) || $msg->result_code != "SUCCESS"){
            $weixinPay->notifyXml('FAIL', '交易失败');
        }
    
        //签名验证失败
        if(!$weixinPay->checkSign($msg)){
            $weixinPay->notifyXml('FAIL', '签名验证失败');
        }
        //$notifyMongo->add($msg);
        //流程走到这里说明已经支付成功了,这里无需更新订单逻辑
        $userOrder = new UserOrder();
        //记录微信订单号
        $userOrder->pay($msg->out_trade_no, $msg->transaction_id);
    }

demo下载:

github地址:https://github.com/pwstrick/weixin_demo

CSDN地址:http://download.csdn.net/detail/loneleaf1/9045731

更多微信公众平台开发微信支付 相关文章请关注!


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 微信公众平台开发 客服接口发送客服消息
  • 微信开发的扫码登录处理的步骤详解
  • JAVA微信开发如何使用?总结JAVA微信开发实例用法
  • 详细说明微信平台绑定微信公众账号方法
  • 微信支付接口开发实例总结
  • 微信支付开发对账单
  • 微信公众平台开发教程(三) 基础框架搭建
  • 关于数据库设计的10篇文章推荐
  • C#开发微信门户及应用微信小店货架信息管理
  • 微信公众号开发--解析CreateTime

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 微信封装的调用微信签名包的类库
    • PHP微信开发之查询微信的示例代码
    • 微信开发之个性化菜单
    • 微信公众平台开发——群发信息
    • 0基础微信开发入门视频教程的资料分享
    • 微信公众号开发网页中及时获取当前用户Openid及注意事项
    • 微信开发之接收事件推送和消息排重
    • 微信开发系列教程(1)
    • 微信开发之模板消息回复
    • Thinkphp微信公众号支付接口

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有