一、需求
在微信中访问业务H5页面,通过H5页面进行唤起支付宝商家付款进行合约签订
二、结论
1. IOS端可以做到直接在微信中唤起支付宝,会提示一个弹窗然后进行跳转
2. Android中会跳转到支付宝的提示页,然后需要转到浏览器进行打开
三、实现方式
1. 调用支付宝的商家付款签约接口,读取签约返回的内容,里面有签约地址,内容类似
https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-java-dynamicVersionNo&app_id=12021004130639609&biz_content=%7B%22access_params%22%3A%7B%22channel%22%3A%22ALIPAYAPP%22%7D%2C%22agreement_effect_type%22%3A%22DIRECT%22%2C%22external_agreement_no%22%3A%222024040709110931266%22%2C%22period_rule_params%22%3A%7B%22execute_time%22%3A%222024-04-07%22%2C%22period%22%3A30%2C%22period_type%22%3A%22DAY%22%2C%22single_amount%22%3A%220.01%22%2C%22total_amount%22%3A%220.12%22%2C%22total_payments%22%3A12%7D%2C%22personal_product_code%22%3A%22CYCLE_PAY_AUTH_P%22%2C%22product_code%22%3A%22GENERAL_WITHHOLDING%22%2C%22sign_scene%22%3A%22INDUSTRY%7CDEFAULT_SCENE%22%2C%22third_party_type%22%3A%22PARTNER%22%7D&charset=UTF8&format=json&method=alipay.user.agreement.page.sign¬ify_url=http%3A%2F%2F111.231.77.235%3A9080%2Fmgrapi%2Fga....
2.执行签约地址头的替换,参考以下java代码,构造出来的returnSignUrl 就是前端真实访问的地址
String signUrl = "读取到的签约地址";
String signParams = signUrl.replace("https://openapi.alipay.com/gateway.do?", "");
try {
// returnSignUrl 构造出签约地址,前端读取这个地址直接用location.href加载就可以
String returnSignUrl = "https://ulink.alipay.com/?scheme="+URLEncoder.encode(
"alipays://platformapi/startapp?appId=60000157&appClearTop=false&startMultApp=YES&sign_params=",
"UTF-8")
+ URLEncoder.encode(URLEncoder.encode(signParams, "UTF-8"), "UTF-8"));
} catch (UnsupportedEncodingException e) {
log.error("sign UnsupportedEncodingException error", e);
}
备注
加https://ulink.alipay.com/ 头的方案非官方标准方案,后期可能会失效,目前是可以使用