`
keete
  • 浏览: 30581 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

uniapp解决芝麻信用预授权支付,不需要引用第三方原生SDK

 
阅读更多
最近flutter很火啊,原因不仅因为flutter的爸爸是谷歌、flutter跨多个平台甚至支持windows,更重要的是其性能接近于原生。
那么uniapp是不是压力山大呢?压力固然有,但自信也依旧在,毕竟vue开发者众多,uniapp已有较强的群众基础及一定的开发者生态。
言归正传。
uniapp有一个客户端支付API:uni.requestPayment 代码如


uni.requestPayment({
						      provider: 'alipay',
						      orderInfo: payOrderAliData.data.data.orderStr, 
						      success: (res)=> {
						         //console.log('success:' + JSON.stringify(res));
						         uni.showToast({
						         			title: "支付成功"
						         			})
						         setTimeout(()=>{
						         	this.$mRouter.push({
						         		 route:this.$mRoutesConfig.paysuccess
						         			} )
						         },2000)
						      },
						      fail:  (err)=> {
						          //console.log('fail:' + JSON.stringify(err));
						  							 this.$mRouter.push({
						  							 	 route:this.$mRoutesConfig.payfailure
						  							 } )
						      }
						  });


payOrderAliData.data.data.orderStr
是通过后台接口生成的,接口程序代码:
		AlipayClient alipayClient = new DefaultAlipayClient(
				alipayConfig.getGatewayUrl(), alipayConfig.getAppId(),
				alipayConfig.getPrivateKey(), alipayConfig.getFormat(),
				alipayConfig.getCharset(), alipayConfig.getPublicKey(),
				alipayConfig.getSignType());
		AlipayFundAuthOrderAppFreezeRequest request =  new  AlipayFundAuthOrderAppFreezeRequest();
		AlipayFundAuthOrderAppFreezeModel model =  new  AlipayFundAuthOrderAppFreezeModel();

		Random random = new Random();
		model.setOrderTitle( "支付宝预授权" );
		model.setOutOrderNo(orderId); //替换为实际订单号
		model.setOutRequestNo( "2020022443242"+random.nextInt(999999999) ); //替换为实际请求单号,保证每次请求都是唯一的
		model.setPayeeUserId("2088631531715552"); //payee_user_id,Payee_logon_id不能同时为空
		model.setPayeeLogonId( "" );
		model.setProductCode( "PRE_AUTH_ONLINE" ); //PRE_AUTH_ONLINE为固定值,不要替换
		model.setAmount( "0.01" );
		//需要支持信用授权,该字段必传
		model.setExtraParam( "{\"category\":\"TIME_SHARE_RENT_CAR\",\"outStoreCode\":\"charge001\",\"serviceId\":\"2020043000000000000029215500\",\"outStoreAlias\":\"chongdian\"}");  //outStoreAlias将在用户端信用守护、支付信息、账单详情页展示
		//选填字段,指定支付渠道
		model.setEnablePayChannels("[{\"payChannelType\":\"PCREDIT_PAY\"},{\"payChannelType\":\"MONEY_FUND\"},{\"payChannelType\":\"CREDITZHIMA\"}]");//余额宝(MONEY_FUND)、花呗(PCREDIT_PAY)以及芝麻信用(CREDITZHIMA)
		request.setBizModel(model);
		request.setNotifyUrl(alipayConfig.getNotifyUrl()); //异步通知地址,必填,该接口只通过该参数进行异步通知
		AlipayFundAuthOrderAppFreezeResponse response = alipayClient.sdkExecute(request); //注意这里是sdkExecute,可以获取签名参数
		if (response.isSuccess()){
			System.out.println( "调用成功" );
			logger.info( "response: {}" +response.getBody()); //签名后的参数,直接入参到
			resultMap.put("orderStr",response.getBody());
		}  else  {
			System.out.println( "调用失败" );
			resultMap.put("orderStr",response.getBody());
		}

		return resultMap;


需要注意:
model.setPayeeUserId,这里填写的是支付宝商户号而不是用户ID
TIME_SHARE_RENT_CAR 类目需要在芝麻信用商家中心申请成功之后方可使用
serviceId 这里是Id非id,官方资料可能是小写,这是一个坑。这个serviceId在哪里查看呢?
找到“芝麻信用商家中心”的“信用服务管理”里的“信用服务ID”即是。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics