最近在微信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. Windows 7上执行Cake 报错原因是Powershell 版本问题

    在Windows 7 SP1 电脑上执行Cake的的例子 http://cakebuild.net/docs/tutorials/getting-started ,运行./Build.ps1 报下面的 ...

  2. 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo

    Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...

  3. python+uwsgi导致redis无法长链接引起性能下降问题记录

    今天在部署python代码到预生产环境时,web站老是出现redis链接未初始化,无法连接到服务的提示,比对了一下开发环境与测试环境代码,完全一致,然后就是查看各种日志,排查了半天也没有查明是什么原因 ...

  4. 一个诡异的COOKIE问题

    今天下午,发现本地的测试环境突然跑不动了,thinkphp直接跑到异常页面,按照正常的排错思路,直接看thinkphp的log 有一条 [ error ] [2]setcookie() expects ...

  5. 【干货分享】流程DEMO-补打卡

    流程名: 补打卡申请 业务描述: 当员工在该出勤的工作日出勤但漏打卡时,于一周内填写补打卡申请. 流程相关文件: 流程包.xml 流程说明: 直接导入流程包文件,即可使用本流程 表单:  流程: 图片 ...

  6. Android—基于微信开放平台v3SDK,开发微信支付填坑。

    接触微信支付之前听说过这是一个坑,,,心里已经有了准备...我以为我没准跳坑出不来了,没有想到我填上了,调用成功之后我感觉公司所有的同事都是漂亮的,隔着北京的大雾霾我仿佛看见了太阳~~~好了,装逼结束 ...

  7. Android开发学习——动画

    帧动画> 一张张图片不断的切换,形成动画效果* 在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长              ...

  8. ERROR 1300 (HY000): Invalid utf8 character string: ''

    在load csv 进mysql的时候,报这个错,苦恼了很长时间,网上搜索不到答案. mysql>    load data infile '/home/hdh/8_sr/8_45.csv'   ...

  9. TCP/IP之TCP_NODELAY与TCP_CORK

    TCP/IP之Nagle算法与40ms延迟提到了Nagle 算法.这样虽然提高了网络吞吐量,但是实时性却降低了,在一些交互性很强的应用程序来说是不允许的,使用TCP_NODELAY选项可以禁止Nagl ...

  10. Maven实战:pom.xml与settings.xml

    pom.xml与settings.xml pom.xml与setting.xml,可以说是Maven中最重要的两个配置文件,决定了Maven的核心功能,虽然之前的文章零零碎碎有提到过pom.xml和s ...