最近在微信H5页面内集成微信JSAPI支付,遇到不少问题,现将集成步骤及遇到的问题记录如下:

1.官方下载SDK,下载地址:https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php_v3.zip

2.下载之后,只保留存放证书的文件cert(从微信公众平台“API安全”中下载),库文件lib,日志文件logs,以及example里面的notify.php,jsapi.php文件

3.配置WxPay.Config.php文件(注意:商户支付密钥key是在微信支付平台“API安全”中设置,地址:https://pay.weixin.qq.com/index.php/account/api_cert,公众账号secret即APPSECRET是在微信公众平台中设置,地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN)。

4.进入微信公众平台,设置微信支付授权目录(一般指的是发起微信支付的上一级目录)及网页授权(开发者中心-》接口权限-》网页授权,填写访问域名即可)。

5.构建微信支付地址

private $snsapi_base_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?';

$param = array(
'appid' => '你的APPID',
'redirect_uri' => '回调地址', //地址指向官方文档中的jsapi.php.作用:调用微信客服端,发起支付。
'response_type' => 'code',
'scope' => 'snsapi_base',
'state' => ’订单号‘
);
$url = $this->snsapi_base_url.http_build_query($param).'#wechat_redirect';

6.打开jsapi.php(注意:从这里开始,微信官方文档就开始坑了)

//注意事项
//1.获取用户openid 官方文档的写法如下
$tools = new JsApiPay();
$openId = $tools->GetOpenid();
//改成如下
$tools = new JsApiPay();
$openId = $tools->GetOpenidFromMp($_GET['code']); //如果是liunx系统,注意区分大小写 (官方都是不区分大小写的) //2.
  $input = new WxPayUnifiedOrder();
  $input->SetBody("test"); //商品描述
  $input->SetAttach("test"); //附加信息
  $input->SetOut_trade_no($order_sn); //商品订单号
  $input->SetTotal_fee("1"); //商品费用 注意:以’分‘为单位
  $input->SetTime_start(date("YmdHis"));
  //$input->SetTime_expire(date("YmdHis", time() + 600)); 直接去掉吧
  $input->SetGoods_tag("test"); //商品标记
  $input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php"); //通知地址,官方文档中的notify.php,作用:处理支付成功后的订单状态及相关信息。
  $input->SetTrade_type("JSAPI");
  $input->SetOpenid($openId);
  $order = WxPayApi::unifiedOrder($input);
  //3.注意引用文件的路径

7.打开notify.php

  一、将官方文档中的Log::全部改成Logwx::(因为官方定义的类是Logwx,但在这里引用的时候变成了Log,坑啊)。

  二、注意引用文件的路径(注:下载的官方文档,需要更改路径的文件:jsapi.php,notify.php,WxPay.Config.php)。

  三、

<?php
ini_set('date.timezone','Asia/Shanghai');
error_reporting(E_ERROR); require_once "lib/WxPay.Api.php";
require_once 'lib/WxPay.Notify.php';
require_once 'log.php'; //初始化日志
$logHandler= new CLogFileHandler("logs/".date('Y-m-d').'.log');
$log = Logwx::Init($logHandler, 15);
class PayNotifyCallBack extends WxPayNotify
{
//查询订单
public function Queryorder($transaction_id)
{
$input = new WxPayOrderQuery();
$input->SetTransaction_id($transaction_id);
$result = WxPayApi::orderQuery($input);
Logwx::DEBUG("query:" . json_encode($result));
if(array_key_exists("return_code", $result)
&& array_key_exists("result_code", $result)
&& $result["return_code"] == "SUCCESS"
&& $result["result_code"] == "SUCCESS")
{
return true;
}
return false;
} //重写回调处理函数
public function NotifyProcess($data, &$msg)
{
Logwx::DEBUG("call back:" . json_encode($data));
$notfiyOutput = array(); if(!array_key_exists("transaction_id", $data)){
$msg = "输入参数不正确";
return false;
}
//查询订单,判断订单真实性
if(!$this->Queryorder($data["transaction_id"])){
$msg = "订单查询失败";
return false;
}
//通过$data['out_trade_no'],在这里处理订单状态 return true;
}
}
$xml = $GLOBALS['HTTP_RAW_POST_DATA']; //微信返回的数据,格式(XML)
Logwx::DEBUG("begin notify");
Logwx::DEBUG("xml:".$xml);
$notify = new PayNotifyCallBack();
$notify->Handle(false);

微信JSAPI支付的更多相关文章

  1. 微信JSApi支付~集成到MVC环境后的最后一个坑(网上没有这种解决方案)

    返回目录 大叔第一人 之前写了关于微信的坑<微信JSApi支付~坑和如何填坑>,今天将微信的jsapi支付封装到了MVC环境里,当然也出现了一些新的坑,如支付参数应该是Json对象而不是J ...

  2. 微信JSApi支付~订单号和微信交易号

    返回目录 谈谈transactionId和out_trade_no 前一篇微信JSApi支付~坑和如何填坑文章反映不错,所以又写了个后篇,呵呵. 每个第三方在线支付系统中都会有至少两类订单号,其一为支 ...

  3. 微信JSAPI支付(比较详细) 关于getRrandWCPayRequest:fail_invalid appid 错误

    原文:微信JSAPI支付(比较详细) 关于getRrandWCPayRequest:fail_invalid appid 错误 首先微信支付需注册  微信公从平台开发 和 微信支付商户平台 关于4个密 ...

  4. 微信JSAPI支付 跟 所遇到的那些坑

    首先介绍一下我在调用微信支付接口使用的是 weixin.senparc SDK,非常方便好用开源的一个微信开发SDK. weixin.senparc SDK 官网:http://weixin.senp ...

  5. 微信JSAPI支付回调

    在微信支付中,当用户支付成功后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答. 在经历了千幸万苦之,填完了所有的JSAPI支付的坑后(微信JSAPI支付 跟 所遇到的那些坑) ...

  6. php微信jsapi支付 支付宝支付 两码合一

    产品开会提出了这样的需求:一个二维码可以微信支付也可以支付宝支付 经过自己的钻研以及询问技术高人(本人代码一般般)和网上搜索 最终实现其功能  我用微信jsapi 和 支付宝网页支付 其实并不怎么难: ...

  7. 微信JSApi支付~坑和如何填坑

    返回目录 微信一直用着不爽,这几天研究它的jsapi支付,即在微信内打开H5页面,完成支付的过程,在这个过程中,你将会遇到各种各样的问题,而大叔将把这些问题的解决方法写一下,希望可以给你带来帮助! 一 ...

  8. asp.net微信jsapi支付

    1.前台页面: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"><head ru ...

  9. 微信公众号配置及微信jsAPI支付

    公众号配置 一.基本配置 首先登陆微信公众平台,在开发--->配置--->公众号开发信息,获取到AppId,开发者秘钥是后台需要的,给到后台,IP白名单配置就是你服务器的IP地址写到里面就 ...

随机推荐

  1. 使用Python保存屏幕截图(不使用PIL)

    起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...

  2. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  3. FFmpeg学习6:视音频同步

    在上一篇文章中,视频和音频是各自独立播放的,并不同步.本文主要描述了如何以音频的播放时长为基准,将视频同步到音频上以实现视音频的同步播放的.主要有以下几个方面的内容 视音频同步的简单介绍 DTS 和 ...

  4. ASP.NET Aries 入门开发教程4:查询区的下拉配置

    背景: 今天去深圳溜达了一天,刚回来,看到首页都是微软大法好,看来离.NET的春天就差3个月了~~ 回到正题,这篇的教程讲解下拉配置. 查询区的下拉配置: 1:查询框怎么配置成下拉? 在配置表头:格式 ...

  5. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  6. OpenCV人脸识别LBPH算法源码分析

    1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...

  7. 基于AOP的MVC拦截异常让代码更优美

    与asp.net 打交道很多年,如今天微软的优秀框架越来越多,其中微软在基于mvc的思想架构,也推出了自己的一套asp.net mvc 框架,如果你亲身体验过它,会情不自禁的说‘漂亮’.回过头来,‘漂 ...

  8. PHP之使用网络函数和协议函数

    使用其他Web站点的数据 <html> <head> <title> Stock Quote From NASDAQ </title> </hea ...

  9. select、poll、epoll之间的区别总结

    select.poll.epoll之间的区别总结 05/05. 2014 select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪 ...

  10. 用Kotlin实现Android定制视图(KAD 06)

    作者:Antonio Leiva 时间:Dec 27, 2016 原文链接:https://antonioleiva.com/custom-views-android-kotlin/ 在我们阅读有关c ...