如何使用easywechat开发微信支付wechat pay功能

由于微信支付接口更新,本文档已过期,请查看新版微信支付JS API支付教程。地址&
本文介绍如何使用JS API支付接口完成微信支付。
一、JS API支付接口(getBrandWCPayRequest)
微信JS API只能在微信内置浏览器中使用,其他浏览器调用无效。微信提供getBrandWCPayRequest接口供商户前端网页调用,调用之前微信会鉴定商户支付权限,若商户具有调起支付的权限,则将开始支付流程。这里主要介绍支付前的接口调用规则,支付状态消息通知机制请参加下文。接口需要注意:所有传入参数都是字符串类型!
getBrandWCPayRequest参数如表6-5所示。
字符串类型
商户注册具有支付权限的公众号成功后即可获得;
字符串类型,32个字节以下
商户生成,从日00:00:00至今的秒数,即当前的时间,且最终需要转换为字符串形式;
随机字符串
字符串类型,32个字节以下
商户生成的随机字符串;
订单详情扩展字符串
字符串类型,4096个字节以下
商户将订单信息组成该字符串,具体组成方案参见接口使用说明中package组包帮劣;由商户按照规范拼接后传入;
字符串类型,参数取值"SHA1"
按照文档中所示填入,目前仅支持SHA1;
字符串类型
商户将接口列表中的参数按照指定方式迚行签名,签名方式使用signType中标示的签名方式,具体签名方案参见接口使用说明中签名帮劣;由商户按照规范签名后传入;
表6-5 getBrandWCPayRequest参数
&&& getBrandWCPayRequest返回值如表6-6所示。
get_brand_wcpay_request:ok& 支付成功
get_brand_wcpay_request:cancel 支付过程中用户取消
get_brand_wcpay_request:fail 支付失败
表6-6 getBrandWCPayRequest返回值
JS API的返回结果 get_brand_wcpay_request:ok 仅在用户成功完成支付时返回。由于前端交互复杂,get_brand_wcpay_request:cancel
get_brand_wcpay_request:fail 可以统一处理为用户遇到错误或者主动放弃,不必细化区分。
二、JS API支付实现
下面代码是微信官方提供的JS API支付demo
2 include_once("WxPayHelper.php");
5 $commonUtil = new CommonUtil();
6 $wxPayHelper = new WxPayHelper();
9 $wxPayHelper-&setParameter("bank_type", "WX");
10 $wxPayHelper-&setParameter("body", "test");
11 $wxPayHelper-&setParameter("partner", "");
12 $wxPayHelper-&setParameter("out_trade_no", $commonUtil-&create_noncestr());
13 $wxPayHelper-&setParameter("total_fee", "1");
14 $wxPayHelper-&setParameter("fee_type", "1");
15 $wxPayHelper-&setParameter("notify_url", "htttp://");
16 $wxPayHelper-&setParameter("spbill_create_ip", "127.0.0.1");
17 $wxPayHelper-&setParameter("input_charset", "GBK");
22 &script language="javascript"&
23 function callpay()
WeixinJSBridge.invoke('getBrandWCPayRequest',&?php echo $wxPayHelper-&create_biz_package(); ?&,function(res){
WeixinJSBridge.log(res.err_msg);
alert(res.err_code+res.err_desc+res.err_msg);
30 &/script&
32 &button type="button" onclick="callpay()"&wx pay test&/button&
33 &/body&
34 &/html&
将其中的微信支付参数修改成自己所申请得到的,然后将网页上传到微信支付目录下,给测试账号回复该网页地址。用户就可以实现一次JS API支付。
三、效果演示
下面是官方DEMO修改后,发起支付的页面图。
输入支付密码
阅读(...) 评论()前期准备:
申请微信支付后, 会收到2个参数, 商户id,和商户key.注意,这2个参数,不要和微信的参数混淆.微信参数: appid, appkey, token支付参数: merchant_id(商户号), key(支付密钥)支付密钥怎么得到?到 https://pay. --&账户中心--&API安全--&设置API密钥自行设置一个32位的密钥
微信支付流程:
1、composer安装EasyWechat包
环境要求:
PHP &= 5.5.9
composer require overtrue/wechat:~3.1 -vvv
2、公众号配置
2.2、配置网页授权
3、初始化SDK,创建一个&EasyWeChat\Foundation\Application&实例
use EasyWeChat\Foundation\A
protected $app=null;
public function construct(){
$options = [
* Debug 模式,bool 值:true/false
* 当值为 false 时,所有的日志都不会记录
* 账号基本信息,请从微信公众平台/开放平台获取
=& 'your-app-id',
=& 'your-app-secret',
// AppSecret
=& 'your-token',
'aes_key' =& '',
// EncodingAESKey,安全模式下请一定要填写!!!
* 日志配置
* level: 日志级别, 可选为:
debug/info/notice/warning/error/critical/alert/emergency
* permission:日志文件权限(可选),默认为null(若为null值,monolog会取0644)
* file:日志文件位置(绝对路径!!!),要求可写权限
'log' =& [
=& 'debug',
'permission' =& 0777,
=& '/tmp/easywechat.log',
* OAuth 配置
* scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login
* callback:OAuth授权完成后的回调页地址
'oauth' =& [
=& ['snsapi_userinfo'],
'callback' =& '/examples/oauth_callback.php',
* 微信支付
'payment' =& [
'merchant_id'
=& 'your-mch-id',
=& 'key-for-signature',
'cert_path'
=& 'path/to/your/cert.pem', // XXX: 绝对路径!!!!
'key_path'
=& 'path/to/your/key',
// XXX: 绝对路径!!!!
'notify_url'
=& '默认的订单回调地址',
// 你也可以在下单时单独设置来想覆盖它
// 'device_info'
// 'sub_app_id'
// 'sub_merchant_id' =& '',
$this-&$app = new Application($options);
4. 得到支付对象payment
$payment =$this-&$app-&
5、把订单对象order(订单号,金额,openid)以参数传入
use EasyWeChat\Foundation\A
use EasyWeChat\Payment\O
$attributes = [ 'trade_type' =& 'JSAPI', // JSAPI,NATIVE,APP...
'body' =& 'iPad mini 16G 白色', 'detail' =& 'iPad mini 16G 白色',
'out_trade_no' =& '8018',//订单号
'total_fee' =& 5388, // 单位:分
'notify_url' =& '/order-notify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
'openid' =& '当前用户的 openid', // trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识, // ... ];
$order = new Order($attributes);
6.、预处理,得到一个预处理id, payment-&prepare(order);
$result = $payment-&prepare($order);
if ($result-&return_code == 'SUCCESS' && $result-&result_code == 'SUCCESS'){
$prepayId = $result-&prepay_
7、生成支付JS配置
$json = $payment-&configForPayment($prepayId); // 返回 json 字符串,如果想返回数组,传第二个参数 false
8、将把订单号和json写入用户确认支付的模板中,触发js,调起支付
return view('done',['order'=&$ordersn,'json'=&$json]);
$('form').submit (function() {
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {!!$json!!},
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ) {
// 使用以上方式判断前端返回,微信团队郑重提示:
// res.err_msg将在用户支付成功后返回
// ok,但并不保证它绝对可靠。
return false;
9、成功回调
在用户成功支付后,微信服务器会向该&订单中设置的回调URL&发起一个 POST 请求,请求的内容为一个 XML。
先在中间件VerifyCsrfToken中配置paid方法无需走CSRF验证
public function paid(){
$response =$this-&$app-&payment-&handleNotify(function($notify, $successful){
// 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
$order = 查询订单($notify-&out_trade_no);
if (!$order) { // 如果订单不存在
return 'Order not exist.'; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
// 如果订单存在
// 检查订单是否已经更新过支付状态
if ($order-&paid_at) { // 假设订单字段“支付时间”不为空代表已经支付
return true; // 已经支付成功了就不再更新了
// 用户是否支付成功
if ($successful) {
// 不是已经支付状态则修改为已经支付状态
$order-&paid_at = time(); // 更新支付时间为当前时间
$order-&status = 'paid';
} else { // 用户支付失败
$order-&status = 'paid_fail';
$order-&save(); // 保存订单
return true; // 返回处理完成
return $response;
至此微信支付就完成了,若有其他问题,请参考
阅读(...) 评论()18561人阅读
一、预备知识:
微信官方文档java SE, Java EE
二、关于EasyWechat:(更新中)
EasyWechat能做什么?
简化服务器端的消息处理和发送保证收发消息的效率和安全性
EasyWechat不能做什么?
用来做微信客户端
EasyWechat成熟吗?
EasyWechat好用吗?
请往下看。
三、上HelloWorld:
新建一个Web应用,导入easywechat.jar。
写一个类继承自WeixinServletSupport,就像这样:
import javax.servlet.annotation.WebS
import org.easywechat.msg.BaseM
import org.easywechat.msg.TextM
import org.easywechat.msg.req.TextReqM
import org.easywechat.msg.req.BaseReqM
import org.easywechat.servlet.WeixinServletS
@WebServlet(&/wechat&)
public class DemoServlet extends WeixinServletSupport {
private static final long serialVersionUID = 1L;
protected String getToken() {
return &my token&;
protected BaseMsg handleTextMsg(TextReqMsg msg) {
return new TextMsg(&你说了: & + msg.getContent());
继承自WeixinServletSupport的类必须重写getToken方法,返回自己配置的token值。
这个demo接受文本消息,并原样返回用户发送的文本消息。
恩,使用easywechat的Helloworld代码就这么多。现在可以把项目打包部署了。
几个常见问题:
1、如果项目中用到Web MVC框架,要注意微信入口的Servlet不要被其他框架的filter过滤掉;
2、上面Demo使用注解的形式指定Servlet对应的url,需要Servlet3.0及以上。否则需要通过web.xml配置;
3、在微信开发者中心配置的服务器URL,需要对应到微信入口的Servlet。
为方便在本地调试微信公众平台应用,建议使用“微信公众平台测试工具”:
试用easywechat:
项目地址:
EasyWechat交流群:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:31221次
排名:千里之外
评论:21条
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
请求各位大神
回调地址是这样写的:
$input-&SetNotify_url("/scanpay_callback");
控制器中试图打印得到的返回数据 : $postdata = file_get_contents("php://input");
$disk = Storage::disk('wxpay');
$contents = $disk-&append('wxpay.txt',' ');
但是没有任何数据
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
哥们微信支付用的是easywechat嘛
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你可以先在入口打日志,看看有没有收到回调
其他的看看这篇博客
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:

我要回帖

更多关于 wechat和微信 的文章

 

随机推荐