电商收付通系列⑦,合单下单之小程序支付

简介: 在我接这个接口的时候,官方并没有明确给出合单支付支持小程序支付,凭借一腔热血去尝试了一下可以成功,prepay_id就是调用JS合单支付获取的。现在再看文档,已经明确列出来了“小程序调起支付”的字眼。所以大家可以放心的接入小程序合单支付哈。支付场景较多,系列文章只介绍小程序合单支付,APP合单支付、JS合单支付依瓢画葫芦,都一样哈。要注意,合单中同一个二级商户只允许有一笔子订单。订单如果需要进行分账等,需要在合单中指定需要进行分账(profit_sharing为true)。

1、介绍

在我接这个接口的时候,官方并没有明确给出合单支付支持小程序支付,凭借一腔热血去尝试了一下可以成功,prepay_id就是调用JS合单支付获取的。现在再看文档,已经明确列出来了“小程序调起支付”的字眼。所以大家可以放心的接入小程序合单支付哈。支付场景较多,系列文章只介绍小程序合单支付,APP合单支付、JS合单支付依瓢画葫芦,都一样哈。要注意,合单中同一个二级商户只允许有一笔子订单。订单如果需要进行分账等,需要在合单中指定需要进行分账(profit_sharing为true)。

文档地址:

https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/combine/chapter3_2.shtml

2、创建参数实体

按文档创建参数实体类。

参数实体JsapiParam:

@Data
public class JsapiParam {
    private String combine_appid;
    private String combine_mchid;
    private String combine_out_trade_no;
    private SceneInfo scene_info;
    private List<SubOrder> sub_orders;
    private CombinePayerInfo combine_payer_info;
    private String time_start;
    private String time_expire;
    private String notify_url;
    private String limit_pay;
}

参数实体SceneInfo:

public class SceneInfo {

    private String device_id;
    private String payer_client_ip;
}

参数实体SubOrder:

public class SubOrder {

    private String mchid;
    private String attach;
    private Amount amount;
    private String out_trade_no;
    private String sub_mchid;
    private String detail;
    private Boolean profit_sharing;
    private String description;
    private SettleInfo settle_info;

}

参数实体CombinePayerInfo:

public class CombinePayerInfo {

    private String openid;
}

参数实体Amount:

@Data
public class Amount {

    private Integer total_amount;
    private String currency;
}

参数实体SettleInfo:

public class SettleInfo {

    private Boolean profit_sharing;
    private Integer subsidy_amount;
}

image.png

3、生成预支付交易会话标识prepay_id


    String requestParam = JSON.toJSONString(param);

    logger.info("jsapi param:{}",requestParam);

    HttpResponse response = HttpUtils.v3HttpExecute("POST", TransactionsUrl.JSAPI,
            "自己系统的应用名称","服务商商户号","商户API证书序列号","平台证书序列号",requestParam,"商户API证书位置.pem",null);
    JSONObject body = JSONObject.parseObject(response.body());

    logger.info("jsapi heads result:{}",response.headers());
  
    logger.info("jsapi body result:{}",body);
  
    return body;
}
public static void main(String[] args) {
  JsapiParam jsapiParam = new JsapiParam();
  jsapiParam.setCombine_appid("服务商appid");
  jsapiParam.setCombine_mchid("服务商商户号");
  jsapiParam.setCombine_out_trade_no("out_trade_no1_"+System.currentTimeMillis() + "");

  SceneInfo sceneInfo = new SceneInfo();
  sceneInfo.setDevice_id("POS1:12");
  sceneInfo.setPayer_client_ip("14.17.22.32");

  jsapiParam.setScene_info(sceneInfo);

  SubOrder subOrder = new SubOrder();
  subOrder.setMchid("服务商商户号");
  subOrder.setAttach("123&456&789");
  Amount amount = new Amount();
  amount.setTotal_amount(1);
  amount.setCurrency("CNY");
  subOrder.setAmount(amount);
  subOrder.setOut_trade_no("out_trade_no2_"+System.currentTimeMillis() + "");
  subOrder.setSub_mchid("二级商户商户号");
  subOrder.setDetail("商品详细描述"+subOrder.getSub_mchid());
  subOrder.setProfit_sharing(true);
  subOrder.setDescription("商品"+subOrder.getSub_mchid());

  List<SubOrder> subOrders = new ArrayList<>();
  subOrders.add(subOrder);

  jsapiParam.setSub_orders(subOrders);

  CombinePayerInfo combinePayerInfo = new CombinePayerInfo();
  combinePayerInfo.setOpenid("服务商appid对应下的openid");
  jsapiParam.setCombine_payer_info(combinePayerInfo);
  String a = DateFormatUtils.format(new Date(),"yyyy-MM-dd'T'HH:mm:ssZZ");
  System.out.println("a====="+a);
  jsapiParam.setTime_start(a);
  jsapiParam.setNotify_url("https://yourapp.com/notify");
  
  jsapi(jsapiParam);
}

获取的结果

image.png

image.png

4、计算签名值

签名规则:

https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/combine/chapter3_8.shtml


  try {

      //商户私钥
      String mchPrivateKey = CertificateUtils.getPrivateKey(mchPrivateKeyPath);
      logger.info("timestamp:{},nonceStr:{}",timestamp,nonceStr);

      //拼签名串
      StringBuilder sb = paySignMessage(mchAppid,timestamp,nonceStr,packageParam);

      logger.info("paySign original string:{}",sb.toString());

      //计算签名
      String paySign = new String(Base64.encodeBase64(v3signRSA(sb.toString(),mchPrivateKey)));

      logger.info("paySign result:{}",paySign);

      return paySign;

  } catch (Exception e) {
      logger.error("authorization Exception result:{}",e);
      e.printStackTrace();
      return null;
  }
}

5、小程序端测试

将参加签名timeStamp、nonceStr、package以及签名结果paySign传给小程序端,paySign默认为RSA,即可在小程序端唤起支付

例如:

wx.requestPayment(
{
"timeStamp": "1414561699",
"nonceStr": "5K8264ILTKCH16CQ2502SI8ZNMTM67VS",
"package": "prepay_id=wx201410272009395522657a690389285100",
"signType": "RSA",
"paySign": "oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ\/X+QBhcCYL21N7cHCTUxbQ+EAt6Uy+lwSN22f5YZvI45MLko8Pfso0jm46v5hqcVwrk6uddkGuT+Cdvu4WBqDzaDjnNa5UK3GfE1Wfl2gHxIIY5lLdUgWFts17D4WuolLLkiFZV+JSHMvH7eaLdT9N5GBovBwu5yYKUR7skR8Fu+LozcSqQixnlEZUfyE55feLOQTUYzLmR9pNtPbPsu6WVhbNHMS3Ss2+AehHvz+n64GDmXxbX++IOBvm2olHu3PsOUGRwhudhVf7UcGcunXt8cqNjKNqZLhLw4jq\/xDg==",
})

image.png

6、结果

image.png

image.png

image.png

image.png

山水有相逢,来日皆可期,谢谢阅读,我们再会

我手中的金箍棒,上能通天,下能探海

上一篇:电商收付通系列⑥,商户进件之查询申请状态

相关文章
|
5月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的电商个性化推荐系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的电商个性化推荐系统附带文章和源代码部署视频讲解等
47 0
|
4月前
|
小程序 视频直播 UED
电商直播小程序系统开发:打造“直播+电商+社交”闭环
电商直播小程序成为商家与消费者互动的关键,通过微信提供的实时视频工具,实现流畅购物体验。系统功能包括直播预览、主播管理、红包互动、用户管理及闭环购物。它强化品牌效应,利用私域流量,简化流程并转化会员。开发涉及需求分析、设计规划、功能开发、测试优化及上线维护。企业需关注用户体验,以保持竞争力。寻求开发合作可联系相关人员。
|
3月前
|
小程序 前端开发 JavaScript
【电商新机遇】支付宝小程序如何助你打造爆款电商解决方案?揭秘背后的技术奥秘!
【8月更文挑战第27天】本文详细介绍如何利用支付宝小程序构建电商应用,覆盖从项目初始化、页面设计、功能开发到数据分析的全流程。首先,需注册开发者账号并安装相关工具;随后创建项目,并按示例配置基本页面结构;接着设计商品列表等界面布局;再实现商品展示等功能;最后运用支付宝提供的工具进行数据分析,以优化用户体验及营销策略。跟随本教程,您将能打造出一款完整的电商小程序。
93 1
|
4月前
|
小程序
商家店铺电商小程序模板源码
商家店铺电商小程序模板源码
49 5
|
4月前
|
开发框架 小程序 前端开发
私域电商小程序系统开发:提供可行的电商解决方案
私域电商小程序助广州企业融合线上线下业务,利用智能手机普及与网络技术,提供个性化购物体验。开发涉及需求分析、UI设计、前后端开发及测试上线。技术要点包括微信小程序框架、前端后端技术及安全优化。市场竞争需关注用户需求、特色服务、技术创新与合作推广。通过差异化策略抓住市场机遇。
|
5月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的金融支付终端管理系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的金融支付终端管理系统附带文章和源代码部署视频讲解等
135 9
|
4月前
|
小程序 安全 UED
百果园社区电商小程序开发:打造私域精准营销发展趋势
百果园借助社区电商小程序转型,拓展线上渠道,增强品牌形象,降低运营成本,适应市场变化。小程序提供实时购物、社群互动、商家入驻及优惠活动,强调用户体验、功能丰富性和安全性,成为品牌与消费者连接的新桥梁。
|
5月前
|
JSON 缓存 小程序
技术笔记:uniapp微信小程序支付
技术笔记:uniapp微信小程序支付
|
5月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的电商城镇互助平台附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的电商城镇互助平台附带文章和源代码部署视频讲解等
27 0
|
5月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的电商数据分析附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的电商数据分析附带文章和源代码部署视频讲解等
39 0