微信&支付宝 APP支付小结

1,068 阅读3分钟

微信支付

  1. 先到微信开放平台注册账号、通过开发者认证。

  2. 创建应用,该应用也就是你的app,并提交审核。

  3. 审核后,应用详情下面有接口信息->微信支付->申请开通,并填写申请微信支付的资料。

  4. 审核通过后,商户将收到邮件通知,邮件中包含商户号和登录密码,请牢记申请时填写的邮箱地址。

  5. 此时可以输入你的商户号和登录密码登录微信支付平台,将可查看你创建的这个应用信息:里面可以查看和设置微信支付需要的api密钥,也可以查看到相应的appid和appsecret。

    另外你也可以看到你的其他应用,但是api密钥仍然是你创建的这个应用的,想要查看和修改其他应用的api密钥,需要使用创建其他应用得到的商户号和密码重新登录以进行相应操作。

注意:

  • 微信异步通知url不支持带参数的url,如异步通知地址写为http://xxxx.cn:8090/yyyy/weixinNotify.do?method=pay ,而实际将会向http://xxxx.cn:8090/yyyy/weixinNotify.do 这个地址发送异步通知。

  • 文档官方详细链接:pay.weixin.qq.com/wiki/doc/ap…

支付宝支付

  1. 先登录支付宝企业账户(b.alipay.com)。产品大全->APP支付->立即接入。

  2. 完善资料,等待审核通过。

  3. 登录支付宝开放平台(open.alipay.com)。开发者中心->创建支付应用 审核通过后即可。

  4. 点击app,查看app信息:里面可以查看和设置接口加签,设置应用公钥和支付宝公钥以及appid、appsecret。pid在服务市场->mapi网关产品密钥中查看。

注意:

  • 未上架App的支付接口应在b.alipay.com中进行申请,并且得到的是【移动支付】接口字样。否则应在open.alipay.com中进行申请,得到的是【自助签约-高级手机APP支付2.0 】接口字样。另外注意,所有应用的支付宝公钥都是一样的。

  • 由于以前是移动支付,现在新版叫做APP支付,因此以前的demo,参数生成等均不可用了,而现在生成APP支付订单信息,应使用如下代码:

//实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");

	//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
	AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();

	//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
	AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();

	model.setBody("我是测试数据");
	model.setSubject("App支付测试Java");
	model.setOutTradeNo(outtradeno);
	model.setTimeoutExpress("30m");
	model.setTotalAmount("0.01");
	model.setProductCode("QUICK_MSECURITY_PAY");

	request.setBizModel(model);
	request.setNotifyUrl("商户外网可以访问的异步地址");

	try {
	        //这里和普通的接口调用不同,使用的是sdkExecute
	        AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);

	        //就是orderString 可以直接给客户端请求,无需再做处理。
	        System.out.println(response.getBody());
	    } catch (AlipayApiException e) {
	        e.printStackTrace();
	}

同理,异步通知应使用:

//获取支付宝POST过来反馈信息
Map<String,String> params = new HashMap<String,String>();
Map requestParams = request.getParameterMap();

	for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
	    String name = (String) iter.next();
	    String[] values = (String[]) requestParams.get(name);
	    String valueStr = "";
	    for (int i = 0; i < values.length; i++) {
	        valueStr = (i == values.length - 1) ? valueStr + values[i]: valueStr + values[i] + ",";
		}
  	//乱码解决,这段代码在出现乱码时使用。
 	 //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
 	 params.put(name, valueStr);
	 }

	//切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
	//boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String 	charset, String sign_type)

	boolean flag = AlipaySignature.rsaCheckV1(params, alipaypublicKey, charset, "RSA")