最近在微信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. 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

    由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...

  2. C语言 · Torry的困惑(基本型)

    问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7--这样的数叫做质数.Torry突然想到一个问题,前10.100.1000.10000--个质数的乘积是多少呢?他把这个问题告诉老师 ...

  3. [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程

    怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html  ...

  4. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  5. Effective java笔记(二),所有对象的通用方法

    Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...

  6. (转)从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    原文地址:  http://www.cnblogs.com/lyhabc/p/4682028.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第二篇,主要讲述如何搭建故障转移集 ...

  7. [原创]ubuntu16.04LTS使用细节

    如何给自己安装的应用创建桌面图标 拿php开发神器phpstorm为例,找到可执行文件所在路径. 这里是/home/haive/PhpStorm/bin/phpstorm.sh 打开dash,搜索&q ...

  8. 【Star CCM+实例】开发一个简单的计算流程.md

    流程开发在CAE过程中处于非常重要的地位. 主要的作用可能包括: 将一些经过验证的模型隐藏在流程中,提高仿真的可靠性 将流程封装成更友好的界面,降低软件的学习周期 流程开发实际上需要做非常多的工作,尤 ...

  9. 网站缓存技术总结( ehcache、memcache、redis对比)

    网站技术高速发展的今天,缓存技术已经成为大型网站的一个关键技术,缓存设计好坏直接关系的一个网站访问的速度,以及购置服务器的数量,甚至影响到用户的体验. 网站缓存按照存放的地点不同,可以分为客户端缓存. ...

  10. TCP三次握手图解