导航:首页 > 编程语言 > 微信jsapi支付java

微信jsapi支付java

发布时间:2022-08-02 12:24:07

⑴ 微信移动支付时用官方给的例子吗

微信支付jsapi(java版),具体代码如下:

代码太多,更多代码请访问http://www.vxzsk.com/394.html
1.项目使用springmvcrestful风格的,需要用到jar包请自行下载
2.整个项目只需要修改com.tenpay.configure.WxPayConfig中的配置信息就行。

//appid
publicstaticStringAPP_ID="公众id";
//JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看
publicstaticStringAPP_SECRET="公众号中的秘钥";
//受理商ID,身份标识
publicstaticStringMCH_ID="商户id";
//商户支付密钥Key,装完整数后,配置得到。32位长度
publicstaticStringKEY="商户平台中配置证书,设置的秘钥";
//异步回调地址
publicstaticStringNOTIFY_URL="支付成功后的回调action";
publicstaticStringCHARTSET="UTF-8";
//加密方式
publicstaticStringSIGN_TYPE="MD5";
//redirect_uri,微信授权重定向地址
publicstaticStringREDIRECT_URI;

static{
try{
REDIRECT_URI=URLEncoder.encode("微信授权成功后重定向的action",CHARTSET);
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
}

3.项目核心类com.tenpay.action.WxPayAction
pay函数:支付前准备函数,从数据库获取订单号,查询订单金额,订单描述、openid、prepay_id等等。
notify函数:支付成功后异步回调函数。

一、新建基于springMVC框架的javaweb项目名字为wxPay

packagecom.tenpay.action;

importjava.io.ByteArrayOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.UnsupportedEncodingException;
importjava.util.Map;
importjava.util.SortedMap;
importjava.util.TreeMap;

importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

importorg.jdom2.JDOMException;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;

importcom.tenpay.RequestHandler;
importcom.tenpay.configure.WxPayConfig;
importcom.tenpay.service.ServiceUtil;
importcom.tenpay.util.MD5Util;
importcom.tenpay.util.Sha1Util;
importcom.tenpay.util.XMLUtil;

importnet.sf.json.JSONObject;

/*******************************************************************************
*<b>类名:WxPayAction.java</b><br/>
*功能:微信支付,调用jsapi<br/>
*日期:<br/>
*
*@authorV型知识库www.vxzsk.com
*@version1.0
*
******************************************************************************/
@Controller
@RequestMapping("/v_3")
publicclassWxPayAction{

/**
*微信客户端授权成功后根据redirect_uri参数调整到pay接口,去准备支付前信息接口
*@paramrequest
*@paramresponse
*@return
*@throwsException
*/
@RequestMapping("pay")
publicStringorder(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{
/**
*第一步:用户同意授权,根据参数,获取code
*授权成功后返回的授权码,参考:http://mp.weixin.qq.com/wiki/17/.html#.E7.AC.AC.E4.B8.80.E6.AD.A5.EF.BC.9A.E7.94.A8.E6.88.B7.E5.90.8C.E6.84.8F.E6.8E.88.E6.9D.83.EF.BC.8C.E8.8E.B7.E5.8F.96code
*/
Stringcode=request.getParameter("code");
Stringstate=request.getParameter("state");

//state可以为任何含义,根据你前端需求,这里暂时叫商品id
//授权码、商品id
System.out.println("code="+code+",state="+state);

/**
*第二步:通过code换取网页授权access_token
*根据授权码code获取access_token,参考:http://mp.weixin.qq.com/wiki/17/.html#.E7.AC.AC.E4.BA.8C.E6.AD.A5.EF.BC.9A.E9.80.9A.E8.BF.87code.E6.8D.A2.E5.8F.96.E7.BD.91.E9.A1.B5.E6.8E.88.E6.9D.83access_token
*/
//下面就到了获取openid,这个代表用户id.
//获取openID
Stringopenid=ServiceUtil.getOpenId(code);
//生成随机字符串
Stringnoncestr=Sha1Util.getNonceStr();
//生成1970年到现在的秒数.
Stringtimestamp=Sha1Util.getTimeStamp();
//订单号,自定义生成规则,只要全局唯一就OK
Stringout_trade_no="NO"+System.currentTimeMillis()+"0001";
//订单金额,应该是根据state(商品id)从数据库中查询出来
Stringorder_price=String.valueOf(1);
//商品描述,应该是根据state(商品id)从数据库中查询出来
Stringbody="商品描述,测试....";

/**
*第三步:统一下单接口
*需要第二步生成的openid,参考:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
*/
RequestHandlerreqHandler=newRequestHandler(request,response);
//初始化RequestHandler类可以在微信的文档中找到.还有相关工具类
reqHandler.init();
//执行统一下单接口获得预支付id,一下是必填参数

//微信分配的公众账号ID(企业号corpid即为此appId)
reqHandler.setParameter("appid",WxPayConfig.APP_ID);
//微信支付分配的商户号
reqHandler.setParameter("mch_id",WxPayConfig.MCH_ID);
//终端设备号(门店号或收银设备ID),注意:PC网页或公众号内支付请传"WEB"
reqHandler.setParameter("device_info","WEB");
//随机字符串,不长于32位。推荐随机数生成算法
reqHandler.setParameter("nonce_str",noncestr);
//商品描述
reqHandler.setParameter("body",body);
//商家订单号
reqHandler.setParameter("out_trade_no",out_trade_no);
//商品金额,以分为单位
reqHandler.setParameter("total_fee",order_price);
//APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。
reqHandler.setParameter("spbill_create_ip","123.57.58.123");
//下面的notify_url是用户支付成功后为微信调用的action异步回调.
reqHandler.setParameter("notify_url",WxPayConfig.NOTIFY_URL);
//交易类型,取值如下:JSAPI,NATIVE,APP,详细说明见参数规定
reqHandler.setParameter("trade_type","JSAPI");
//------------需要进行用户授权获取用户openid-------------
reqHandler.setParameter("openid",openid);//这个必填.
/*
*<xml><appid>wx2421b1c4370ec43b</appid><attach>支付测试</attach><body>
*JSAPI支付测试</body><mch_id>10000100</mch_id><nonce_str>
*</nonce_str><notify_url>http://wxpay.
*weixin.qq.com/pub_v2/pay/notify.v2.php</notify_url><openid>
*oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid><out_trade_no>1415659990</
*out_trade_no><spbill_create_ip>14.23.150.211</spbill_create_ip><
*total_fee>1</total_fee><trade_type>JSAPI</trade_type><sign>
*</sign></xml>
*/
//生成签名,并且转为xml
StringrequestXml=reqHandler.getRequestXml();
System.out.println("requestXml:"+requestXml);

//得到的预支付id
Stringprepay_id=ServiceUtil.unifiedorder(requestXml);
SortedMap<String,String>params=newTreeMap<String,String>();
params.put("appId",WxPayConfig.APP_ID);
params.put("timeStamp",timestamp);
params.put("nonceStr",noncestr);
params.put("package","prepay_id="+prepay_id);
params.put("signType","MD5");

System.out.println("params:"+JSONObject.fromObject(params).toString());

//生成支付签名,这个签名给微信支付的调用使用
SortedMap<Object,Object>signMap=newTreeMap<Object,Object>();
signMap.put("appId",WxPayConfig.APP_ID);
signMap.put("timeStamp",timestamp);
signMap.put("nonceStr",noncestr);
signMap.put("package","prepay_id="+prepay_id);
signMap.put("signType","MD5");

//微信支付签名
StringpaySign=MD5Util.createSign(signMap,WxPayConfig.KEY);
System.out.println("PaySIGN:"+paySign);

//微信分配的公众账号ID(企业号corpid即为此appId)
request.setAttribute("appId",WxPayConfig.APP_ID);
//时间戳
request.setAttribute("timeStamp",timestamp);
//随机字符串
request.setAttribute("nonceStr",noncestr);
//预支付id,就这样的格式
request.setAttribute("package","prepay_id="+prepay_id);
//加密格式
request.setAttribute("signType",WxPayConfig.SIGN_TYPE);
//微信支付签名
request.setAttribute("paySign",paySign);
return"pay";
}

/**
*异步返回
*/
@RequestMapping("notify")
publicStringnotify(HttpServletRequestrequest,HttpServletResponseresponse){
try{

InputStreaminStream=request.getInputStream();
ByteArrayOutputStreamoutSteam=newByteArrayOutputStream();
byte[]buffer=newbyte[1024];
intlen=0;
while((len=inStream.read(buffer))!=-1){
outSteam.write(buffer,0,len);
}
outSteam.close();
inStream.close();
StringresultStr=newString(outSteam.toByteArray(),WxPayConfig.CHARTSET);
Map<String,String>resultMap=XMLUtil.doXMLParse(resultStr);

System.out.println("微信回调结果:"+resultMap.toString());

Stringresult_code=resultMap.get("result_code");
Stringis_subscribe=resultMap.get("is_subscribe");
Stringout_trade_no=resultMap.get("out_trade_no");
Stringtransaction_id=resultMap.get("transaction_id");
Stringsign=resultMap.get("sign");
Stringtime_end=resultMap.get("time_end");
Stringbank_type=resultMap.get("bank_type");
Stringreturn_code=resultMap.get("return_code");
//签名验证
//GenericValueuserLogin=delegator.findOne("UserLogin",UtilMisc.toMap("userLoginId","admin"),false);
if(return_code.equals("SUCCESS")){
//此处就是你的逻辑代码
//修改数据库支付状态
}
request.setAttribute("out_trade_no",out_trade_no);
//通知微信.异步确认成功.必写.不然会一直通知后台.八次之后就认为交易失败了.
response.getWriter().write(RequestHandler.setXML("SUCCESS",""));
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(JDOMExceptione){
e.printStackTrace();
}
return"notify";
}
}

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

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

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

⑶ jsapi支付什么意思

JSAPI支付是指用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块来完成支付。
应答时间:2020-09-30,最新业务变化请以平安银行官网公布为准。

[平安银行我知道]想知道更多?快来看“平安银行我知道”吧~

https://b.pingan.com.cn/paim/iknow/index.html

⑷ 用Java怎么实现微信支付

具体方法步骤:

一、准备阶段:已认证微信号,且通过微信支付认证,这个可以看微信文档,很详细,这里就不再重复。

⑸ 微信企业号开通jsapi 支付问题

1、在微信中或许您找不到微信支付的通道,没有任何可绑定银行卡的入口。其实,当您第一次进行支付时会提供给您绑定银行卡的入口,绑定后,就可以在其他公众帐号中完成微信支付。

2、现在我们来完成首次支付操作以绑定银行卡。在微信主界面切换到“我”界面,然后点击列表项中的“表情商店”选项,如图所示。

3、在新界面中选择一套表情进行购买操作,如“饭团和他的朋友们”,点击右边的价格按钮购买此套表情(不是真的购买,只是为了演示给大家如何绑定银行卡)。

4、点击“付款”按钮开始使用微信支付,支付时需要绑定银行卡。请输入持卡人银行卡号码,然后点击“下一步”按钮。

5、输入银行卡类型、银行预留持卡人姓名、身份证、手机号等个人信息。

⑹ 微信h5支付和jsapi支付的区别

1、含义不同。

微信h5支付:是集成在微信客户端的支付功能,用户可以通过手机完成快速的支付流程。

jsapi支付:以绑定银行卡的快捷支付为基础的支付。

2、支付方式不同。

微信h5支付:h5支付是用在公众号内。

jsapi支付:jsapi支付是网页发起的微信支付请求。

3、功能不同。

微信h5支付:可以在手机网站内直接支付,为移动支付方式,简单快捷。

jsapi支付:仅可以在微信浏览器内发起支付,比如公众号内的网页和微信小程序,略微麻烦。

⑺ java微信支付JSAPI签名报空指针null是怎么回事

你好,先按照异常信息找到是哪行抛出的异常。
能抛出空指针异常说明这一行上有对象是null但是去调用方法了。
按照这个思路检查一下吧。
如果有帮助到你,请点击采纳。

⑻ 用Java怎么实现微信支付

具体方法步骤:

一、准备阶段:已认证微信号,且通过微信支付认证,这个可以看微信文档,很详细,这里就不再重复。

⑼ 微信支付怎么配置jsapi

微信支付,是微信向有出售物品/提供服务需求的商家提供推广销售、支付收款、经营分析的整套解决方案,包括多种支付方式,如付款码支付、JSAPI支付、小程序支付、APP支付、电脑网站支付、企业微信支付、H5支付,以及多种支付工具,如微信红包、代金券等。

微信支付配置步骤:

步骤1:注册支付商户号

步骤2、秘钥(32位)

步骤3、上传证书

步骤4、商户号新增小程序授权(注意授权状态是否是成功)

步骤5、公众号支付、JSAPI开通

登录小程序后台找到配置管理→支付配置

登录开通微信支付商户平台(https://pay.weixin.qq.com),在微信支付商户平台里面进行查找商户号和设置API密钥、下载证书

以下步骤查找上述基础的内容在哪个地方查找。

步骤1、支付商户号查找:

(注:登录商户号尽量使用360浏览器或者谷歌浏览器)

进入后在 账户中心—商户信息、可以看到微信支付商户号、把商户号记一下,填到后台。

注:首次进入微信支付后台需要下载控件和操作证书(按照提示一步步操作即可)

步骤二:API密钥:随后点击下面的API安全、设置一下API秘钥,API密钥必须是32位字母或数字

注:该处设置秘钥时看下设置下方的API秘钥,不要设置APIV3的秘钥。

注:该处设置下后把新设置的密钥填到制作后台。

步骤三:证书路径、密钥路径:API秘钥设置好了之后、点击下载API证书

(注:该处证书上传用于退款。退款需要往商户号里充值钱。)

下载后是一个压缩包,然后解压、然后根据名称分别上传到证书路径、密钥路径。

步骤四:小程序在公众号里申请,公众号里开通的微信支付;该方式需要先登录商户号->产品中心->APPID授权管理->新增该小程序的授权。具体如下图:

如提示已绑定(此步骤跳过)

授权后到微信小程序后台同意授权。如图:

确保上图申请单状态是授权成功。

步骤五:查看微信支付商户号公众号支付、JSAPI是否开通。如下图:(如未开通,点击开通下,如果没有公众号支付可不用管)

(1)公众号支付开通(如果没有公众号支付,此步骤跳过)

(2)JSAPI开通

阅读全文

与微信jsapi支付java相关的资料

热点内容
6轴机器人算法 浏览:886
手机主题照片在哪个文件夹 浏览:290
安卓手机后期用什么软件调色 浏览:626
cad修改快捷键的命令 浏览:240
好钱包app怎么登录不了 浏览:857
树莓派都用python不用c 浏览:755
access文件夹树的构造 浏览:660
安卓多指操作怎么设置 浏览:656
linux树形目录 浏览:727
平方根的简单算法 浏览:898
千牛订单页面信息加密取消 浏览:558
单片机自制红外遥控灯 浏览:719
服务器最小配置怎么弄 浏览:853
ibm服务器硬件如何升级 浏览:923
全球程序员节点赞 浏览:986
php函数传递数组 浏览:631
人工峰群算法的目标函数 浏览:468
如何删加密文档 浏览:105
涂鸦app一键执行如何删除 浏览:756
安卓手机如何打开fr3文件 浏览:743