您的位置:

微信支付jsapi完整源码(微信jsapi支付demo)

微信支付jsapi完整源码(微信jsapi支付demo)

更新:

本文目录一览:

如何用PHP实现微信支付,求教。新手!说明详细点

以PHP语言为例,对微信支付的开发流程进行一下说明:

1.获取订单信息。

2.根据订单信息和支付相关的账号生成sign,并且生成支付参数。

3.将支付参数信息POST到微信服务器,获取返回信息。

4.根据返回信息生成相应的支付代码(微信内部)或是支付二维码(非微信内),完成支付。

JS交互微信之JSAPI支付

本篇为 JS交互微信系列篇 的第四篇 微信JSAPI支付 ,记录在微信内置浏览器内用调用微信支付过程。

JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。

要拥有两个账号:

要开通产品中心的JSAPI支付。然后 产品中心=开发配置=支付配置=公众号支付配置 绑定支付授权目录,写已通过ICP备案的域名。

另外,要在ip白名单中,配置测试地址ip和线上生产地址ip,不然各种回调都会失败!

由于在微信内支付需要获取用户的 openid ,要获取它则必须通过网页授权配置。在公微信公众平台中, 公众号设置=功能设置=网页授权域名 中按要求填写。

在支付流程方面,重点依然都在后端处理,前端方面步骤比较简单。本文只叙述前端内容。

在将要进入支付的前一页面,直接接入微信授权,然后跳转进要支付的那个页面。举个例子:有a、b两个页面,在b页面用到支付,b页面由a页面跳转而来。那么在a页面跳b页面的时候,别直接跳转b的url,而是跳转到:

{appId}redirect_uri={b.html}response_type=codescope=snsapi_base#wechat_redirect

我们注意到,这里有这两个需要自己写的参数: appid 和 redirect_uri ,意义是:

另外,还有一个注意的点是, b.html这个url我们要进行encode转码,不然地址解析可能会出现问题!

上一步执行完后,在微信浏览器中,我们会得到一个链接,类似:

b.html?code={code}state=#/

在此处,我们得到了一个code值,这就是我们获取 openid 的凭证了。

获取方法当然是把值传给后台,后台去处理啦~

在上一步中,我们拿到code值后,就可以提交一些信息给后端了,比如商品相关属性、总价等,另外加上code值,传给后端。后端一顿操作后,返回给前端。我们需要的参数如下(后端返回下面这些参数):

上个步骤拿到需要交互微信的参数后,就开始调用微信的支付接口了,如下:

至此,调用微信JSAPI来完成在微信内的支付就完成了。

java实现微信支付,通过JSAPI发起支付请求

在config.jsp填 好 在ResponseHandler填下APPKEY 用wxm-pay-api-demo.html或者jsapi.jsp我测试是都可以用.试能用哪个用哪个吧 JS已经搞好了

ResponseHandler,ResponseHandler,payNotifyUrl.jsp都修了..

微信的jsapi支付能整合到thinkphp吗

在demo文件夹中:

js_api_call.php:提供了微信jsapi的主要功能

log_.php:提供打印日志功能

notify_url.php:异步通知功能

notify_url.log:异步通知日志

qrcode.js:生成二维码js插件

接下来介绍下WxPayPubHelper文件夹下的文件:

cacert 文件夹是存放微信证书的(PS:具体我还没怎么用证书,虽然下载下来了,证书请在微信商户平台上下载)

SDKRuntimeException.php:这个就是处理异常的、

WxPay.pub.config.php:这个是做一些配置的,稍后会详细讲解

WxPayPubHelper.php:这个其实就是微信支付的工具类,对于初学者只要知道怎么用他里面的方法就够了

OK,了解了微信官方提供的文件,我们就可以开始整合到TP中了,废话不多说,这就开始!

step1:将demo中的WxPayPubHelper整个文件夹都复制到TP的Vendor目录下,像我这样:

step2:配置WxPay.pub.config.php文件:

这里的配置都有注释,如果还有不懂或者配置出现问题可以留言提问

同时我把微信的这个配置放到了TP的config中,这一步大家可以随意

?php

return array(

//'配置项'='配置值'

define('WEB_HOST', '这是您的网站域名地址'),

/*微信支付配置*/

'WxPayConf_pub'=array(

'APPID' = '您的APPID',

'MCHID' = '您的商户ID',

'KEY' = '商户秘钥',

'APPSECRET' = '您的APPSECRET',

'JS_API_CALL_URL' = WEB_HOST.'/index.php/Home/WxJsAPI/jsApiCall',

'SSLCERT_PATH' = WEB_HOST.'/ThinkPHP/Library/Vendor/WxPayPubHelper/cacert/apiclient_cert.pem',

'SSLKEY_PATH' = WEB_HOST.'/ThinkPHP/Library/Vendor/WxPayPubHelper/cacert/apiclient_key.pem',

'NOTIFY_URL' = WEB_HOST.'/index.php/Home/WxJsAPI/notify',

'CURL_TIMEOUT' = 30

)

);

复制代码

step3:将生成二维码的js放在Public目录下(这里目前用不到,在用扫码支付的情况才用到这个js),将日志文件放在Public目录下:像我这样:

step4:创建控制器:这里创建了一个WxJsAPIController的控制器,这里大家随便起名字,只要这个跟你们在公众平台上的设置相对应就可以(公众平台设置稍后介绍)

下面是控制器的代码部分了,首先初始化控制器,将WxPayPubHelper导入

/**

* 初始化

*/

public function _initialize()

{

//引入WxPayPubHelper

vendor('WxPayPubHelper.WxPayPubHelper');

}

复制代码

接下来是使用统一支付接口,获取prepay_id的方法:

public function jsApiCall()

{

//使用jsapi接口

$jsApi = new \JsApi_pub();

//=========步骤1:网页授权获取用户openid============

//通过code获得openid

if (!isset($_GET['code']))

{

//触发微信返回code码

$url = $jsApi-createOauthUrlForCode(C('WxPayConf_pub.JS_API_CALL_URL'));

Header("Location: $url");

}else

{

//获取code码,以获取openid

$code = $_GET['code'];

$jsApi-setCode($code);

$openid = $jsApi-getOpenId();

}

//=========步骤2:使用统一支付接口,获取prepay_id============

//使用统一支付接口

$unifiedOrder = new \UnifiedOrder_pub();

//设置统一支付接口参数

//设置必填参数

//appid已填,商户无需重复填写

//mch_id已填,商户无需重复填写

//noncestr已填,商户无需重复填写

//spbill_create_ip已填,商户无需重复填写

//sign已填,商户无需重复填写

$unifiedOrder-setParameter("openid",$openid);//商品描述

$unifiedOrder-setParameter("body","贡献一分钱");//商品描述

//自定义订单号,此处仅作举例

$timeStamp = time();

$out_trade_no = C('WxPayConf_pub.APPID').$timeStamp;

$unifiedOrder-setParameter("out_trade_no",$out_trade_no);//商户订单号

$unifiedOrder-setParameter("total_fee","1");//总金额

$unifiedOrder-setParameter("notify_url",C('WxPayConf_pub.NOTIFY_URL'));//通知地址

$unifiedOrder-setParameter("trade_type","JSAPI");//交易类型

//非必填参数,商户可根据实际情况选填

//$unifiedOrder-setParameter("sub_mch_id","XXXX");//子商户号

//$unifiedOrder-setParameter("device_info","XXXX");//设备号

//$unifiedOrder-setParameter("attach","XXXX");//附加数据

//$unifiedOrder-setParameter("time_start","XXXX");//交易起始时间

//$unifiedOrder-setParameter("time_expire","XXXX");//交易结束时间

//$unifiedOrder-setParameter("goods_tag","XXXX");//商品标记

//$unifiedOrder-setParameter("openid","XXXX");//用户标识

//$unifiedOrder-setParameter("product_id","XXXX");//商品ID

$prepay_id = $unifiedOrder-getPrepayId();

//=========步骤3:使用jsapi调起支付============

$jsApi-setPrepayId($prepay_id);

$jsApiParameters = $jsApi-getParameters();

$this-assign('jsApiParameters',$jsApiParameters);

$this-display('pay');

//echo $jsApiParameters;

}

复制代码

这里都是复制微信demo的,改改名字罢了,没什么其他的

接下来是异步通知方法,也是复制的微信demo上的

public function notify()

{

//使用通用通知接口

$notify = new \Notify_pub();

//存储微信的回调

$xml = $GLOBALS['HTTP_RAW_POST_DATA'];

$notify-saveData($xml);

//验证签名,并回应微信。

//对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,

//微信会通过一定的策略(如30分钟共8次)定期重新发起通知,

//尽可能提高通知的成功率,但微信不保证通知最终能成功。

if($notify-checkSign() == FALSE){

$notify-setReturnParameter("return_code","FAIL");//返回状态码

$notify-setReturnParameter("return_msg","签名失败");//返回信息

}else{

$notify-setReturnParameter("return_code","SUCCESS");//设置返回码

}

$returnXml = $notify-returnXml();

echo $returnXml;

//==商户根据实际情况设置相应的处理流程,此处仅作举例=======

//以log文件形式记录回调信息

// $log_ = new Log_();

$log_name= __ROOT__."/Public/notify_url.log";//log文件路径

log_result($log_name,"【接收到的notify通知】:\n".$xml."\n");

if($notify-checkSign() == TRUE)

{

if ($notify-data["return_code"] == "FAIL") {

//此处应该更新一下订单状态,商户自行增删操作

log_result($log_name,"【通信出错】:\n".$xml."\n");

}

elseif($notify-data["result_code"] == "FAIL"){

//此处应该更新一下订单状态,商户自行增删操作

log_result($log_name,"【业务出错】:\n".$xml."\n");

}

else{

//此处应该更新一下订单状态,商户自行增删操作

log_result($log_name,"【支付成功】:\n".$xml."\n");

}

//商户自行增加处理流程,

//例如:更新订单状态

//例如:数据库操作

//例如:推送支付完成信息

}

}

复制代码

这里我把记录日志的类写到了function.php中:

function log_result($file,$word)

{

$fp = fopen($file,"a");

flock($fp, LOCK_EX) ;

fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."\n".$word."\n\n");

flock($fp, LOCK_UN);

fclose($fp);

}

复制代码

好了 其实控制器的方法就这么多,没什么其他的了,下面看一下页面,直接上代码吧:

!DOCTYPE html

html

head

meta http-equiv="content-type" content="text/html;charset=utf-8"/

title微信安全支付/title

script type="text/javascript"

//调用微信JS api 支付

function jsApiCall()

{

WeixinJSBridge.invoke(

'getBrandWCPayRequest',

?php echo $jsApiParameters; ?,

function(res){

WeixinJSBridge.log(res.err_msg);

alert(res.err_code+res.err_desc+res.err_msg);

//alert("{$jsApiParameters}");

}

);

}

function callpay()

{

if (typeof WeixinJSBridge == "undefined"){

if( document.addEventListener ){

document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);

}else if (document.attachEvent){

document.attachEvent('WeixinJSBridgeReady', jsApiCall);

document.attachEvent('onWeixinJSBridgeReady', jsApiCall);

}

}else{

jsApiCall();

}

}

/script

/head

body

/br/br/br/br

div align="center"

button style="width:210px; height:30px; background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" type="button" onclick="callpay()" 贡献一下/button

/div

/body

/html

复制代码

无须改动什么,直接复制就好

接下来是微信公众平台上的配置了,这里我遇到过问题,如果有在这里遇到问题的同学请留言,比如出现了access_deined或者access_notallowed等问题,这都可能是因为这里配置不对。

通过手机点链接后可以跳转到微信支付的源码怎么写?

微信公司平台帐号注册后官方首页很简单,没有导航栏目页面新建等功能。需要通过三方软件与微信接口做二次开发。首先要在现在微信开个接口,这是要工商局认证的。

最近一个项目用手机上的浏览器(不是微信浏览器)浏览html5网页时,看到有的网站点击“微信支付”时,直接打开了微信进行支付(也就是在浏览器直接调用微信),这个是怎么做到的?

比如页面上有个文字链接:微信支付,点击之后就自动调取微信APP了,而且我不是用微信浏览器打开的网页。最新实用的微信H5手机网站支付源码实例。

效果图片如下:

完整代码如下:即使在Safari中,也是可以点击一个链接到达微信支付界面,只是用户支付完了以后,目前还没有方法再返回到Safari。 如果是自己开发的app,当然更没有任何问题了,可以实现和native app一样的效果。

 源码如下:

html

head

meta http-equiv="content-type" content="text/html;charset=utf8"/

meta id="viewport" name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1; user-scalable=no;" /

body,p,ul,li,h1,h2,form,input{margin:0;padding:0;}

h1,h2{font-size:100%;}

ul{list-style:none;}

body{-webkit-user-select:none;-webkit-text-size-adjust:none;font-family:Helvetica;background:#ECECEC;}

html,body{height:100%;}

a,button,input,img{-webkit-touch-callout:none;outline:none;}

a{text-decoration:none;}

.hide{display:none!important;}

.cf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}

a[class*="btn"]{display:block;height:42px;line-height:42px;color:#FFFFFF;text-align:center;border-radius:5px;}

.btn-blue{background:#3D87C3;border:1px solid #1C5E93;}

.btn-green{background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #43C750), color-stop(1, #31AB40));border:1px solid #2E993C;box-shadow:0 1px 0 0 #69D273 inset;}

.charge{font-family:Helvetica;padding-bottom:10px;-webkit-user-select:none;}

.charge h1{height:44px;line-height:44px;color:#FFFFFF;background:#3D87C3;text-align:center;font-size:20px;-webkit-box-sizing:border-box;box-sizing:border-box;}

.charge h2{font-size:14px;color:#777777;margin:5px 0;text-align:center;}

.charge .content{padding:10px 12px;}

.charge .select li{position:relative;display:block;float:left;width:100%;margin-right:2%;height:150px;line-height:150px;text-align:center;border:1px solid #BBBBBB;color:#666666;font-size:16px;margin-bottom:5px;border-radius:3px;background-color:#FFFFFF;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;}

.charge .price{border-bottom:1px dashed #C9C9C9;padding:10px 10px 15px;margin-bottom:20px;color:#666666;font-size:12px;}

.charge .price strong{font-weight:normal;color:#EE6209;font-size:26px;font-family:Helvetica;}

.charge .showaddr{border:1px dashed #C9C9C9;padding:10px 10px 15px;margin-bottom:20px;color:#666666;font-size:12px;text-align:center;}

.charge .showaddr strong{font-weight:normal;color:#9900FF;font-size:26px;font-family:Helvetica;}

微信支付jsapi完整源码(微信jsapi支付demo)

本文目录一览: 1、如何用PHP实现微信支付,求教。新手!说明详细点 2、JS交互微信之JSAPI支付 3、java实现微信支付,通过JSAPI发起支付请求 4、微信的jsapi支付能整合到think

2023-12-08
jsapi微信支付源码(小微商户jsapi支付)

本文目录一览: 1、微信支付怎么配置jsapi 2、JS交互微信之JSAPI支付 3、java实现微信支付,通过JSAPI发起支付请求 4、微信支付后端篇 微信支付怎么配置jsapi 微信支付,是微信

2023-12-08
微信JSAPI支付详解

2023-05-21
微信jsapi源码(微信开发API)

本文目录一览: 1、微信的jsapi支付能整合到thinkphp吗 2、JS交互微信之JSAPI支付 3、微信支付怎么配置jsapi 微信的jsapi支付能整合到thinkphp吗 在demo文件夹中

2023-12-08
ios调用jsapi,ios调用微信支付

本文目录一览: 1、如何在React中调用微信的jsSDK 2、微信支付时jsapi缺少参数appid怎么办 3、php微信支付,调用jsapi的时候,IOS成功支付,安卓提示fail_invalid

2023-12-08
php微信支付v3版签名生成(php 微信支付流程)

2022-11-12
调试支付jsapi,支付安装调试费

本文目录一览: 1、jsapi支付什么意思? 2、调用支付jsapi缺少参数是什么意思 3、微信支付时jsapi缺少参数appid怎么办 4、JS交互微信之JSAPI支付 jsapi支付什么意思? J

2023-12-08
微支付js调用实例,前端实现微信支付

本文目录一览: 1、微信h5支付和jsapi支付的区别 2、redirect_url参数错误总结 3、微支付怎么用啊 4、微信公众平台如何开通微信支付? 5、微支付怎么开通 6、微支付中扫码支付开发流

2023-12-08
微信JSAPI全面指南

2023-05-17
php开发微信支付小微商户v3,html5微信支付php

2023-01-07
php微信支付统一下单,微信支付 php

2023-01-05
微信刷卡支付java,微信刷卡支付一天限额多少

2022-11-21
微信小程序转php,微信小程序转h5

2022-11-24
微信官方扫码支付php(手机微信扫码支付)

2022-11-14
微信小程序php传值,微信小程序 传值

2022-12-02
php微信支付回调,微信支付成功回调

2022-11-26
微信小程序php文件路径,微信小程序php文件路径怎么改

2022-11-18
微信网页js操作(微信网页js操作流程)

本文目录一览: 1、微信小程序wxs的使用(当页面数据渲染前添加js操作) 2、公众号h5中使用微信JS-SDK(个人笔记) 3、JS交互微信之JSAPI支付 微信小程序wxs的使用(当页面数据渲染前

2023-12-08
php微信支付不停给回调,php 微信支付回调

2023-01-04
php版微信js,微信公众号 php

2022-11-19