日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

微信APP支付-Android+springboot搭建后端(一)

發布時間:2023/12/20 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信APP支付-Android+springboot搭建后端(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇教程將詳細的介紹如何實現微信APP支付,分為Android移動端開發和springboot后端開發,有一些在開發過程中遇到的坑將會被標注,解決方案也會給出。

一、準備工作

準備工作就是獲取必要的參數,注冊微信商戶平臺和微信開放平臺分別獲取到商戶號和APPID,并且在微信商戶平臺申請API證書、設置API密鑰、設置APIv3密鑰等



這些工作在公司里會有相關人員做好,將參數給出,直接拿來用即可。準備工作就是比較繁瑣,而且微信開發者認證需要300元。做完相關工作后,一定要查看權限是否申請到,微信商戶平臺是否關聯APPID等。由于這些東西全是我一個人做,所以對流程比較了解。

二、Springboot后端開發

先介紹一下微信支付的后端開發,微信APP支付開發與支付寶支付不一樣,所以在這邊需要將后端搭建好。打開微信支付的文檔中心,我們主要根據官方給的提示按照步驟操作就可以了。這里我們就僅展示APP下單。

1、創建項目

主要的目錄結構如下。包含了配置類,工具類等。包名 com.atguigu.paymentdemo(借鑒了網課)

2、配置文件application.yml和wxpay.properties

application.yml

server:port: 8090 #服務端口spring:application:name: payment-demo #應用的名字jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://ip:3310/payment_demo?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=falseusername: 用戶名password: 密碼mybatis-plus:configuration: #sql日志log-impl: org.apache.ibatis.logging.stdout.StdOutImplmapper-locations: classpath:com/atguigu/paymentdemo/mapper/xml/*.xmllogging:level:root: info

wxpay.properties

# 微信支付相關參數 # 商戶號 wxpay.mch-id=商戶號寫自己的 # 商戶API證書序列號 wxpay.mch-serial-no=寫自己的# 商戶私鑰文件 wxpay.private-key-path=apiclient_key.pem # APIv3密鑰 wxpay.api-v3-key=寫自己的 # API密鑰 wxpay.api-key=寫自己的 # APPID wxpay.appid=寫自己的 # 微信服務器地址 wxpay.domain=https://api.mch.weixin.qq.com # 接收結果通知地址 wxpay.notify-domain=https://ip或者域名

注意:

  • 這里需要注意將上面的參數改為自己申請到的數據(商戶號、序列號、秘鑰等等),逐個修改就可以
  • 這里將申請到的商戶私鑰文件apiclient_key.pem放在了根目錄下
  • 接受回調的通知地址wxpay.notify-domain這里需要注意一下,官方文檔說必須為https地址,所以這里我們就使用一個內網穿透工具生成一個HTTPS地址。請自行查看ngrok這個工具。公司里應該都會給的。

3、配置文件pom.xml

pom.xml

<!--Swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><!--Swagger ui--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.7.0</version></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--mysql 驅動--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--MyBatis-Plus:是MyBatis的增強--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1</version></dependency><!-- 代碼生成器配置 --><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.0</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><!-- 生成自定義配置的元數據信息 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!--微信支付SDK--><dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-apache-httpclient</artifactId><version>0.3.0</version></dependency><!--json處理器--><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId></dependency><!--網絡請求--><!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp --><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.3</version></dependency>

由于項目打包時會將mapper目錄下xml文件漏掉,所以我們在application.yml文件下配置了classpath:com/atguigu/paymentdemo/mapper/xml/.xml,同時在pom文件下的build下加入下面代碼就可以了,這樣就會在打包時將java目錄中的.xml文件也進行打包。

<build><!-- 項目打包時會將java目錄中的*.xml文件也進行打包 --><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build>

為了讓讀者更好的復現這些功能,下面盡可能的將用到的代碼都放在文章里。

4、vo包

這個目錄主要是生成兩個文件,使用swagger測試時查看響應碼以及收到消息。

ResultCode

public interface ResultCode {public static Integer SUCCESS = 20000;//成功public static Integer ERROR = 20001;//失敗 }

R

@Data @Accessors(chain = true) public class R {@ApiModelProperty(value = "是否成功")private Boolean success;@ApiModelProperty(value = "返回碼")private Integer code;@ApiModelProperty(value = "返回消息")private String message;@ApiModelProperty(value = "返回數據")private Map<String, Object> data = new HashMap<String, Object>();//構造方法私有化private R(){}//鏈式編程//成功靜態方法public static R ok(){R r = new R();r.setSuccess(true);r.setCode(ResultCode.SUCCESS);r.setMessage("成功");return r;}//失敗靜態方法public static R error(){R r = new R();r.setSuccess(false);r.setCode(ResultCode.ERROR);r.setMessage("失敗");return r;}public R success(Boolean success){this.setSuccess(success);return this;}public R message(String message){this.setMessage(message);return this;}public R code(Integer code){this.setCode(code);return this;}public R data(String key, Object value){this.data.put(key, value);return this;}public R data(Map<String, Object> map){this.setData(map);return this;} }

5、config包

這個目錄主要是配置信息,配置Swagger、MyBatisPlus以及WxPay微信支付的參數

Swagger2Config

@Configuration @EnableSwagger2 public class Swagger2Config {@Beanpublic Docket docket(){return new Docket(DocumentationType.SWAGGER_2).apiInfo(new ApiInfoBuilder().title("微信支付案例接口文檔").build());} }

MyBatisPlusConfig

@Configuration @MapperScan("com.atguigu.paymentdemo.mapper") @EnableTransactionManagement //啟用事務管理 public class MyBatisPlusConfig { }

WxPayConfig

這個文件就是讀取到wxpay.properties的信息

@Configuration @PropertySource("classpath:wxpay.properties") //讀取配置文件 @ConfigurationProperties(prefix="wxpay") //讀取wxpay節點 @Data //使用set方法將wxpay節點中的值填充到當前類的屬性中 @Slf4j public class WxPayConfig {// 商戶號private String mchId;// 商戶API證書序列號private String mchSerialNo;// 商戶私鑰文件private String privateKeyPath;// APIv3密鑰private String apiV3Key;// API密鑰private String apiKey;// APPIDprivate String appid;// 微信服務器地址private String domain;// 接收結果通知地址private String notifyDomain;/*** 獲取商戶的私鑰文件* @param filename* @return*/public PrivateKey getPrivateKey(String filename){try {return PemUtil.loadPrivateKey(new FileInputStream(filename));} catch (FileNotFoundException e) {throw new RuntimeException("私鑰文件不存在", e);}}/*** 獲取簽名驗證器* @return*/@Beanpublic ScheduledUpdateCertificatesVerifier getVerifier(){log.info("獲取簽名驗證器");//獲取商戶私鑰PrivateKey privateKey = getPrivateKey(privateKeyPath);//私鑰簽名對象PrivateKeySigner privateKeySigner = new PrivateKeySigner(mchSerialNo, privateKey);//身份認證對象WechatPay2Credentials wechatPay2Credentials = new WechatPay2Credentials(mchId, privateKeySigner);// 使用定時更新的簽名驗證器,不需要傳入證書ScheduledUpdateCertificatesVerifier verifier = new ScheduledUpdateCertificatesVerifier(wechatPay2Credentials,apiV3Key.getBytes(StandardCharsets.UTF_8));return verifier;}/*** 獲取http請求對象* @param verifier* @return*/@Bean(name = "wxPayClient")public CloseableHttpClient getWxPayClient(ScheduledUpdateCertificatesVerifier verifier){log.info("獲取httpClient");//獲取商戶私鑰PrivateKey privateKey = getPrivateKey(privateKeyPath);WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create().withMerchant(mchId, mchSerialNo, privateKey).withValidator(new WechatPay2Validator(verifier));// ... 接下來,你仍然可以通過builder設置各種參數,來配置你的HttpClient// 通過WechatPayHttpClientBuilder構造的HttpClient,會自動的處理簽名和驗簽,并進行證書自動更新CloseableHttpClient httpClient = builder.build();return httpClient;}/*** 獲取HttpClient,無需進行應答簽名驗證,跳過驗簽的流程*/@Bean(name = "wxPayNoSignClient")public CloseableHttpClient getWxPayNoSignClient(){//獲取商戶私鑰PrivateKey privateKey = getPrivateKey(privateKeyPath);//用于構造HttpClientWechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create()//設置商戶信息.withMerchant(mchId, mchSerialNo, privateKey)//無需進行簽名驗證、通過withValidator((response) -> true)實現.withValidator((response) -> true);// 通過WechatPayHttpClientBuilder構造的HttpClient,會自動的處理簽名和驗簽,并進行證書自動更新CloseableHttpClient httpClient = builder.build();log.info("== getWxPayNoSignClient END ==");return httpClient;} }

6、enums包

這個主要是定義微信支付的提供的地址,將其設置為枚舉型,進行拼接就可以組裝成URL地址

WxApiType

@AllArgsConstructor @Getter public enum WxApiType {/*** APP下單*/APP_PAY("/v3/pay/transactions/app"),/*** 類型*/private final String type; }

WxNotifyType

@AllArgsConstructor @Getter public enum WxNotifyType {/*** APP支付通知*/APP_NOTIFY("/api/wx-pay/app/notify"),/*** 類型*/private final String type; }

OrderStatus

@AllArgsConstructor @Getter public enum OrderStatus {/*** 未支付*/NOTPAY("未支付"),/*** 支付成功*/SUCCESS("支付成功"),/*** 已關閉*/CLOSED("超時已關閉"),/*** 已取消*/CANCEL("用戶已取消"),/*** 退款中*/REFUND_PROCESSING("退款中"),/*** 已退款*/REFUND_SUCCESS("已退款"),/*** 退款異常*/REFUND_ABNORMAL("退款異常");/*** 類型*/private final String type; }

PayType

@AllArgsConstructor @Getter public enum PayType {/*** 微信*/WXPAY("微信"),/*** 支付寶*/ALIPAY("支付寶");/*** 類型*/private final String type; }

7、util工具包

HttpClientUtils

/*** http請求客戶端*/ public class HttpClientUtils {private String url;private Map<String, String> param;private int statusCode;private String content;private String xmlParam;private boolean isHttps;public boolean isHttps() {return isHttps;}public void setHttps(boolean isHttps) {this.isHttps = isHttps;}public String getXmlParam() {return xmlParam;}public void setXmlParam(String xmlParam) {this.xmlParam = xmlParam;}public HttpClientUtils(String url, Map<String, String> param) {this.url = url;this.param = param;}public HttpClientUtils(String url) {this.url = url;}public void setParameter(Map<String, String> map) {param = map;}public void addParameter(String key, String value) {if (param == null)param = new HashMap<String, String>();param.put(key, value);}public void post() throws ClientProtocolException, IOException {HttpPost http = new HttpPost(url);setEntity(http);execute(http);}public void put() throws ClientProtocolException, IOException {HttpPut http = new HttpPut(url);setEntity(http);execute(http);}public void get() throws ClientProtocolException, IOException {if (param != null) {StringBuilder url = new StringBuilder(this.url);boolean isFirst = true;for (String key : param.keySet()) {if (isFirst) {url.append("?");isFirst = false;}else {url.append("&");}url.append(key).append("=").append(param.get(key));}this.url = url.toString();}HttpGet http = new HttpGet(url);execute(http);}/*** set http post,put param*/private void setEntity(HttpEntityEnclosingRequestBase http) {if (param != null) {List<NameValuePair> nvps = new LinkedList<NameValuePair>();for (String key : param.keySet())nvps.add(new BasicNameValuePair(key, param.get(key))); // 參數http.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); // 設置參數}if (xmlParam != null) {http.setEntity(new StringEntity(xmlParam, Consts.UTF_8));}}private void execute(HttpUriRequest http) throws ClientProtocolException,IOException {CloseableHttpClient httpClient = null;try {if (isHttps) {SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {// 信任所有public boolean isTrusted(X509Certificate[] chain,String authType)throws CertificateException {return true;}}).build();SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();} else {httpClient = HttpClients.createDefault();}CloseableHttpResponse response = httpClient.execute(http);try {if (response != null) {if (response.getStatusLine() != null)statusCode = response.getStatusLine().getStatusCode();HttpEntity entity = response.getEntity();// 響應內容content = EntityUtils.toString(entity, Consts.UTF_8);}} finally {response.close();}} catch (Exception e) {e.printStackTrace();} finally {httpClient.close();}}public int getStatusCode() {return statusCode;}public String getContent() throws ParseException, IOException {return content;}}

HttpUtils

public class HttpUtils {/*** 將通知參數轉化為字符串* @param request* @return*/public static String readData(HttpServletRequest request) {BufferedReader br = null;try {StringBuilder result = new StringBuilder();br = request.getReader();for (String line; (line = br.readLine()) != null; ) {if (result.length() > 0) {result.append("\n");}result.append(line);}return result.toString();} catch (IOException e) {throw new RuntimeException(e);} finally {if (br != null) {try {br.close();} catch (IOException e) {e.printStackTrace();}}}} }

OrderNoUtils

/*** 訂單號工具類** @author qy* @since 1.0*/ public class OrderNoUtils {/*** 獲取訂單編號* @return*/public static String getOrderNo() {return "ORDER_" + getNo();}/*** 獲取退款單編號* @return*/public static String getRefundNo() {return "REFUND_" + getNo();}/*** 獲取編號* @return*/public static String getNo() {SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");String newDate = sdf.format(new Date());String result = "";Random random = new Random();for (int i = 0; i < 3; i++) {result += random.nextInt(10);}return newDate + result;}}

WechatPay2ValidatorForRequest

/*** @author xy-peng*/ public class WechatPay2ValidatorForRequest {protected static final Logger log = LoggerFactory.getLogger(WechatPay2ValidatorForRequest.class);/*** 應答超時時間,單位為分鐘*/protected static final long RESPONSE_EXPIRED_MINUTES = 5;protected final Verifier verifier;protected final String requestId;protected final String body;public WechatPay2ValidatorForRequest(Verifier verifier, String requestId, String body) {this.verifier = verifier;this.requestId = requestId;this.body = body;}protected static IllegalArgumentException parameterError(String message, Object... args) {message = String.format(message, args);return new IllegalArgumentException("parameter error: " + message);}protected static IllegalArgumentException verifyFail(String message, Object... args) {message = String.format(message, args);return new IllegalArgumentException("signature verify fail: " + message);}public final boolean validate(HttpServletRequest request) throws IOException {try {//處理請求參數validateParameters(request);//構造驗簽名串String message = buildMessage(request);String serial = request.getHeader(WECHAT_PAY_SERIAL);String signature = request.getHeader(WECHAT_PAY_SIGNATURE);//驗簽if (!verifier.verify(serial, message.getBytes(StandardCharsets.UTF_8), signature)) {throw verifyFail("serial=[%s] message=[%s] sign=[%s], request-id=[%s]",serial, message, signature, requestId);}} catch (IllegalArgumentException e) {log.warn(e.getMessage());return false;}return true;}protected final void validateParameters(HttpServletRequest request) {// NOTE: ensure HEADER_WECHAT_PAY_TIMESTAMP at lastString[] headers = {WECHAT_PAY_SERIAL, WECHAT_PAY_SIGNATURE, WECHAT_PAY_NONCE, WECHAT_PAY_TIMESTAMP};String header = null;for (String headerName : headers) {header = request.getHeader(headerName);if (header == null) {throw parameterError("empty [%s], request-id=[%s]", headerName, requestId);}}//判斷請求是否過期String timestampStr = header;try {Instant responseTime = Instant.ofEpochSecond(Long.parseLong(timestampStr));// 拒絕過期請求if (Duration.between(responseTime, Instant.now()).abs().toMinutes() >= RESPONSE_EXPIRED_MINUTES) {throw parameterError("timestamp=[%s] expires, request-id=[%s]", timestampStr, requestId);}} catch (DateTimeException | NumberFormatException e) {throw parameterError("invalid timestamp=[%s], request-id=[%s]", timestampStr, requestId);}}protected final String buildMessage(HttpServletRequest request) throws IOException {String timestamp = request.getHeader(WECHAT_PAY_TIMESTAMP);String nonce = request.getHeader(WECHAT_PAY_NONCE);return timestamp + "\n"+ nonce + "\n"+ body + "\n";}protected final String getResponseBody(CloseableHttpResponse response) throws IOException {HttpEntity entity = response.getEntity();return (entity != null && entity.isRepeatable()) ? EntityUtils.toString(entity) : "";}}

這上面都是網課里的東西,我直接拿過來用的,都復制過來了。

8、controller包

上面的都是相關的配置文件,終于到重點部分了。在這里我省略了一些東西,Android端發起微信支付的時候,沒有給參數,只展示了這個場景,每個人的需求不一樣,如果需要參數,請自行改動接口,下面代碼我給注釋掉了。

WxPayController

@RestController @RequestMapping("/api/wx-pay") @Api(tags = "微信APP支付APIv3") @Slf4j public class WxPayController {@Resourceprivate WxPayService wxPayService;/*** APP下單* @param* @return* @throws Exception*/@ApiOperation("調用統一下單API,生成APP下單的預支付交易會話標識") // @PostMapping("/native/{productId}")@PostMapping("/native") // public R APPPay(@PathVariable Long productId) throws Exception {public R APPPay() throws Exception {log.info("發起支付請求 v3");//返回支付所需要的參數給Android端Map<String, Object> map = wxPayService.appPay();log.info("map====>{}",map);return R.ok().setData(map);} }

9、service包

WxPayService

public interface WxPayService {/*** app下單* @param* @return*/Map<String, Object> appPay() throws IOException, NoSuchAlgorithmException, InvalidKeyException, SignatureException; }

WxPayServiceImpl

@Service @Slf4j public class WxPayServiceImpl implements WxPayService {@Resourceprivate WxPayConfig wxPayConfig;@Resourceprivate CloseableHttpClient wxPayClient;protected static final SecureRandom RANDOM = new SecureRandom();/*** APP下單* @param* @return*/@Overridepublic Map<String, Object> appPay() throws IOException, NoSuchAlgorithmException, InvalidKeyException, SignatureException {log.info("生成訂單");String orderNo = OrderNoUtils.getOrderNo();//生成訂單log.info("調用統一下單API");//調用統一下單APIHttpPost httpPost = new HttpPost(wxPayConfig.getDomain().concat(WxApiType.APP_PAY.getType()));// 請求body參數Gson gson = new Gson();Map paramsMap = new HashMap();paramsMap.put("appid", wxPayConfig.getAppid());paramsMap.put("mchid", wxPayConfig.getMchId());paramsMap.put("description", "whq烤肉");paramsMap.put("out_trade_no", orderNo);paramsMap.put("notify_url", wxPayConfig.getNotifyDomain().concat(WxNotifyType.APP_NOTIFY.getType()));Map amountMap = new HashMap();amountMap.put("total", 1);amountMap.put("currency", "CNY");paramsMap.put("amount", amountMap);//將參數轉換成json字符串String jsonParams = gson.toJson(paramsMap);log.info("請求參數 ===> {}" + jsonParams);StringEntity entity = new StringEntity(jsonParams,"utf-8");entity.setContentType("application/json");httpPost.setEntity(entity);httpPost.setHeader("Accept", "application/json");//完成簽名并執行請求CloseableHttpResponse response = wxPayClient.execute(httpPost);try {String bodyAsString = EntityUtils.toString(response.getEntity());//響應體int statusCode = response.getStatusLine().getStatusCode();//響應狀態碼if (statusCode == 200) { //處理成功log.info("成功, 返回結果 = " + bodyAsString);} else if (statusCode == 204) { //處理成功,無返回Bodylog.info("成功");} else {log.info("APP下單失敗,響應碼 = " + statusCode+ ",返回結果 = " + bodyAsString);throw new IOException("request failed");}//響應結果Map<String, String> resultMap = gson.fromJson(bodyAsString, HashMap.class);//得到返回參數String prepay_id = resultMap.get("prepay_id");Map gettoken = getToken(wxPayConfig.getAppid(),prepay_id);String nonceStr = (String) gettoken.get("nonceStr");String sign = (String) gettoken.get("signature");long timestamp = (long) gettoken.get("timestamp");//返回得到的返回參數Map<String, Object> map = new HashMap<>();map.put("prepayid", prepay_id);map.put("sign", sign);map.put("appid", wxPayConfig.getAppid());map.put("partnerid", wxPayConfig.getMchId());map.put("packagevalue", "Sign=WXPay");map.put("noncestr", nonceStr);map.put("timestamp", timestamp);return map;} finally {response.close();}}/*** 生成字符串* @return*/protected String generateNonceStr() {char[] nonceChars = new char[32];for(int index = 0; index < nonceChars.length; ++index) {nonceChars[index] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".charAt(RANDOM.nextInt("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".length()));}return new String(nonceChars);}/*** 生成簽名值* @param appid* @param prepay_id* @return* @throws IOException* @throws SignatureException* @throws NoSuchAlgorithmException* @throws InvalidKeyException*/Map<String,Object> getToken(String appid,String prepay_id) throws IOException, SignatureException, NoSuchAlgorithmException, InvalidKeyException {//隨機字符串String nonceStr = this.generateNonceStr();//隨機字符串//時間戳long timestamp = System.currentTimeMillis() / 1000;//從下往上依次生成String message = buildMessage(appid, timestamp, nonceStr, prepay_id);//簽名String signature = sign(message.getBytes("utf-8"));Map<String , Object> map = new HashMap<>();map.put("timestamp",timestamp);map.put("nonceStr",nonceStr);map.put("signature",signature);return map;}String sign(byte[] message) throws NoSuchAlgorithmException, SignatureException, IOException, InvalidKeyException {//簽名方式Signature sign = Signature.getInstance("SHA256withRSA");//私鑰,通過MyPrivateKey來獲取,這是個靜態類可以接調用方法 ,需要的是_key.pem文件的絕對路徑配上文件名//獲取商戶私鑰PrivateKey privateKey = wxPayConfig.getPrivateKey(wxPayConfig.getPrivateKeyPath());sign.initSign(privateKey);sign.update(message);return Base64.getEncoder().encodeToString(sign.sign());}/*** 按照前端簽名文檔規范進行排序,\n是換行* @param appid* @param timestamp* @param nonceStr* @param prepay_id* @return*/String buildMessage(String appid, long timestamp,String nonceStr,String prepay_id) {return appid + "\n"+ timestamp + "\n"+ nonceStr + "\n"+ prepay_id + "\n";} }

到這里后端的項目就算完成了,此時運行起來就行了。打開swagger進行測試

返回參數就是這些。我們Android進行接收就完成了!
注意:
以上只是簡單的給出微信APP下單的實現,公司里的需要要更完善,比如保存訂單和訂單狀態,產品等等,這些都要與數據庫交互,所以在上面基礎上繼續完成功能就可以了。

總結

以上是生活随笔為你收集整理的微信APP支付-Android+springboot搭建后端(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

五月激情综合婷婷 | 国产另类xxxxhd高清 | 午夜精品婷婷 | 综合国产在线观看 | 狠狠色综合网站久久久久久久 | 久草在线视频中文 | 久草免费在线观看视频 | 亚洲一区二区三区精品在线观看 | 草免费视频 | 亚洲视频在线视频 | 午夜精品一区二区三区在线 | 欧美少妇影院 | 欧美性做爰猛烈叫床潮 | 五月婷婷播播 | 日日夜夜精品免费 | 国产精品久久久久久欧美 | 中文字幕一区二区三区在线观看 | 国产资源在线视频 | 91精品1区2区| 狠狠干夜夜操天天爽 | 亚洲欧美精品一区 | 日本精品久久久久影院 | 国产中文在线观看 | 波多野结衣视频一区 | 国产亚洲一级高清 | 国产精品k频道 | 久久91网 | 韩国精品福利一区二区三区 | 在线观看中文 | 久久免费视频网站 | 毛片基地黄久久久久久天堂 | 久久久久婷 | 91中文字幕网 | 五月婷婷视频在线 | 激情开心站 | av综合av | 天天色天天综合网 | 国产精品女同一区二区三区久久夜 | 中文字幕免费播放 | 四虎在线观看视频 | 亚洲精品视频在 | 亚洲影视九九影院在线观看 | 在线激情小视频 | 黄在线免费看 | 99热精品免费观看 | 精品一区三区 | 欧美日韩一区二区三区视频 | 亚洲精品在线免费观看视频 | 激情自拍av | 97自拍超碰 | 亚洲高清精品在线 | 日韩91在线 | 美腿丝袜av | 韩日av一区二区 | 亚洲九九 | 日本中文字幕电影在线免费观看 | 精品一区二区在线播放 | 高清不卡一区二区三区 | 天天草天天插 | 黄色影院在线观看 | aaa亚洲精品一二三区 | 91原创在线观看 | 亚洲影视九九影院在线观看 | 国产高清视频免费最新在线 | 97视频资源| 欧美一区二区三区免费看 | 丁香 久久 综合 | 免费观看一级视频 | 在线观看mv的中文字幕网站 | 日韩美在线观看 | 91麻豆精品国产91久久久更新时间 | 国产精品99久久久久久小说 | 亚洲国产片 | 亚洲视频在线免费观看 | 四虎在线观看网址 | 日韩免费观看av | 精品久久亚洲 | 免费又黄又爽的视频 | 一级全黄毛片 | 国产精品孕妇 | 丁香5月婷婷 | 97综合在线 | av看片在线观看 | 最近日本中文字幕 | 人成午夜视频 | 91成人在线视频 | 久久五月网 | 国产高清日韩欧美 | 国产精品久久久久久久久搜平片 | 特黄特色特刺激视频免费播放 | 婷婷丁香花五月天 | 免费福利片 | 99爱视频| 一区二区三区免费看 | 亚洲精品视频第一页 | 日韩免费电影一区二区 | 国产精品视频内 | av中文在线 | 婷婷丁香自拍 | 97国产大学生情侣酒店的特点 | 国产精品久久久久久久av大片 | 亚洲一级黄色大片 | 亚洲第一av在线播放 | 国产无区一区二区三麻豆 | 黄色毛片视频 | 久久久18 | 蜜臀一区二区三区精品免费视频 | 在线观看视频99 | 欧美了一区在线观看 | 亚洲欧美成人在线 | 日本不卡视频 | 亚洲精品欧美视频 | 亚洲综合射 | 2023年中文无字幕文字 | av资源免费在线观看 | 国产成人精品综合久久久 | 国产亚洲欧美一区 | 色播99| 国产香蕉视频在线观看 | 国产精品一区二区果冻传媒 | 国产精品第三页 | 一区二区三区av在线 | 国产精品一区二区白浆 | 久久久久久久久久免费 | 中文字幕精品www乱入免费视频 | 日韩av视屏 | 99超碰在线观看 | 色婷婷欧美 | 国产一区二区不卡在线 | 久久久久久久久久久久亚洲 | 午夜精品久久久久久久99婷婷 | 国产精品自产拍在线观看蜜 | 国产高清av| 在线观看91视频 | 久久久久久久久久久黄色 | 日韩欧美观看 | 日韩有色 | 黄色av免费 | 天天看天天干天天操 | 日本三级人妇 | 久草观看视频 | 国产精品视频地址 | 日韩理论电影在线观看 | 日韩大片免费在线观看 | 韩国视频一区二区三区 | 亚洲人在线7777777精品 | 免费在线观看一区 | 一区二区三区在线免费 | 在线观看av大片 | 少妇高潮冒白浆 | 免费在线一区二区 | 9992tv成人免费看片 | 美女黄频在线观看 | 天天射成人 | 国产不卡免费视频 | 日韩女同一区二区三区在线观看 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 日韩精品你懂的 | 四虎影视成人永久免费观看亚洲欧美 | 久久99婷婷 | 蜜臀久久99精品久久久无需会员 | 激情久久婷婷 | 免费一级片在线观看 | 91麻豆福利 | 久久99精品国产麻豆婷婷 | 玖玖在线资源 | 日产av在线播放 | 色综合久久久 | 97超碰国产精品 | 国精产品999国精产品视频 | 在线免费观看视频你懂的 | 成年人免费看片网站 | 亚洲男男gaygay无套同网址 | 夜夜骑日日操 | 欧美与欧洲交xxxx免费观看 | 日韩电影中文字幕在线观看 | 手机在线看片日韩 | 国产精品手机在线 | 91传媒91久久久 | 激情在线网站 | 欧美久草网| 国产成人av网| 久久综合久久久久88 | 一区二区精品在线 | 欧洲亚洲激情 | 亚洲综合精品在线 | 久久精品草 | 亚洲精品黄色片 | 国产在线一区观看 | 久久综合九色综合久99 | 久久久久草 | 91av亚洲| 黄色软件网站在线观看 | 五月婷婷丁香网 | 精品一区二区在线观看 | 91成人精品一区在线播放 | 日p视频 | 欧美一区二区精品在线 | 97超碰资源| 国产成人av网址 | 日本aaaa级毛片在线看 | 国产成年人av | 91网址在线 | 九九在线视频 | 国产午夜精品一区二区三区 | 亚洲国产网站 | 国产二区精品 | 五月婷婷,六月丁香 | 亚洲激情网站免费观看 | 久久国产视屏 | 91香蕉亚洲精品 | 蜜臀久久99精品久久久无需会员 | 在线观看免费视频你懂的 | 91亚洲精品国产 | www.99久久.com| 人人干人人添 | 国产日韩精品一区二区在线观看播放 | 一区二区三区在线观看免费 | 国产高清免费 | 18国产精品福利片久久婷 | 欧美视屏一区二区 | 视频一区二区免费 | 91成人免费观看视频 | 五月婷网 | 九九热只有精品 | 久久国产精品久久国产精品 | 成人av片免费观看app下载 | 国产99久久久国产精品免费看 | 在线看成人av | 三级免费黄色 | 亚洲欧美日韩在线看 | 一区二区三区四区五区在线 | 激情久久久 | 天天综合久久 | 五月婷香 | 成人免费观看在线视频 | 成人免费观看视频大全 | 国产亚洲精品美女 | 在线不卡a | 久久天| 日韩在线视频不卡 | 日韩中文字幕视频在线观看 | 国产精品视频专区 | 中文超碰字幕 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 久久综合影院 | 久久久久久国产精品美女 | 国产精品美女毛片真酒店 | 黄色a一级片 | 欧美精品在线观看一区 | 看国产黄色片 | 国产午夜视频在线观看 | 亚洲理论电影 | 午夜精品视频一区 | 在线免费国产 | 免费网址你懂的 | 激情丁香综合五月 | 天天躁天天躁天天躁婷 | 国产精品一区在线播放 | 亚洲精品视频在线免费 | 99免费看片 | 日韩综合色 | 免费在线播放视频 | 色在线中文字幕 | 日韩精品中字 | 91福利视频免费观看 | 久草亚洲视频 | 青春草视频在线播放 | 免费大片黄在线 | 操操综合 | 欧美日韩视频在线观看一区二区 | 插插插色综合 | 欧美在线久久 | 婷婷综合久久 | 亚洲最新av在线 | 成人影片在线播放 | 成人av片免费看 | 天天操福利视频 | 免费不卡中文字幕视频 | 欧美日韩在线视频观看 | 免费在线黄色av | www.超碰97.com | 免费91在线观看 | 久久伦理 | 久久人人爽人人 | 日本h视频在线观看 | 香蕉在线播放 | 国产精品成人a免费观看 | 亚洲精品视频 | 久久这里只有精品视频99 | 中文字幕制服丝袜av久久 | 最新av在线网站 | 日日干天天操 | 福利视频导航网址 | 日本性生活一级片 | 午夜电影中文字幕 | 中文字幕最新精品 | 久久伊人八月婷婷综合激情 | 中文久久精品 | 99 国产精品| 成人免费在线观看入口 | 日韩久久精品一区二区三区 | 久久国产精品二国产精品中国洋人 | 亚洲综合欧美日韩狠狠色 | 久久久精品欧美 | 在线观看网站av | 久久免费的精品国产v∧ | 一区二区三区视频网站 | 欧美另类调教 | 热久久视久久精品18亚洲精品 | 西西444www大胆高清视频 | 国产黄色av | 日韩欧美综合在线视频 | 夜夜视频欧洲 | 久久精品香蕉视频 | 天天射天天添 | 国产一区二区成人 | 奇米影音四色 | 九七视频在线观看 | 美女激情影院 | 国产精品毛片网 | 久久综合九色 | 欧美一级免费黄色片 | 国产精品一区二区久久精品爱微奶 | 亚洲成人动漫在线观看 | 人人干网| 一二区电影 | 国产免费叼嘿网站免费 | 精品国产乱码久久久久久1区2匹 | 久草在线高清视频 | 国产成人在线免费观看 | 国产精品久久久99 | 五月网婷婷 | 伊人国产在线播放 | 99久久久久久久久久 | 精品国产乱码久久久久久1区二区 | 久久久久久久久久久久久久电影 | 激情综合网天天干 | 国产成人精品999 | 婷婷丁香五| 亚洲欧洲美洲av | 国产高清中文字幕 | 免费日韩电影 | 国产一区在线观看免费 | 中文字幕在线网址 | 国产在线a视频 | 国产精品高清在线 | 色www精品视频在线观看 | 日韩欧美精品在线 | 天天干夜夜擦 | 亚洲日b视频 | 国产日韩欧美视频 | 久久久久五月天 | 91精品国产电影 | 丰满少妇高潮在线观看 | 97在线免费 | 日日夜操| www色,com| 日韩激情视频在线 | 国产精品毛片网 | 国产69精品久久久久久 | 久久久久观看 | 999视频网站 | 国产成人久久av免费高清密臂 | 在线国产91| 久久99国产综合精品 | 午夜免费视频网站 | 天天干夜夜擦 | 国产黄色片免费 | 国产区在线 | 国产剧情在线一区 | 91久色蝌蚪 | 亚洲 成人 欧美 | 999毛片 | 国产精品久久久久久婷婷天堂 | 久久精品一区二区三区国产主播 | 免费电影一区二区三区 | 五月激情站 | 69久久夜色精品国产69 | 91麻豆精品国产91久久久久久 | 亚洲综合色丁香婷婷六月图片 | 久久综合久久综合九色 | 国产91av视频在线观看 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 欧美一级特黄高清视频 | 一级免费看 | 亚洲永久精品在线观看 | 欧美一区日韩精品 | 国产黄色一级片在线 | 91福利免费 | 成人宗合网 | 国产精品成人一区二区三区 | 五月婷婷av | 开心激情久久 | 91视频免费看片 | 99色99 | 日本三级大片 | 五月婷婷影院 | 日本激情中文字幕 | 精品久久久久久久久久岛国gif | 久久久久久久久爱 | 日韩影视精品 | 久久福利小视频 | 91视频免费播放 | 国产色综合 | 国产精品久久久久av | av在线官网 | 国产精品免费久久久久 | 久视频在线播放 | 国产老太婆免费交性大片 | 国产精品一区二区久久国产 | 免费看黄在线网站 | 麻豆国产精品一区二区三区 | 久久久精品国产一区二区电影四季 | 美女视频久久 | 成人免费网站在线观看 | 丁香六月婷婷开心 | 精品一区二区日韩 | 日韩在线观看 | 97在线观看免费高清完整版在线观看 | 亚洲一级电影在线观看 | 精久久久久 | 亚洲精品一区二区18漫画 | 麻豆免费视频网站 | 91久久久久久国产精品 | 精品成人网 | 日本激情视频中文字幕 | 国产精品 日韩 欧美 | 国产精品1区2区3区在线观看 | 在线观看黄色大片 | 国产成人精品一区二区三区免费 | 亚洲欧美激情精品一区二区 | 伊人手机在线 | 久久久久久久久久影视 | 久久久精品视频网站 | 日韩综合在线观看 | 欧美a在线看 | 亚洲三级网 | 国产亚洲精品久久久久久移动网络 | 国产美女视频免费观看的网站 | 久久69精品 | 天天操夜操 | 韩日精品在线 | 色五月激情五月 | 激情 一区二区 | 91porny九色91啦中文 | av观看免费在线 | 亚洲精品免费观看视频 | 狠狠色免费 | 日日成人网 | 国产精品婷婷午夜在线观看 | 骄小bbw搡bbbb揉bbbb | 9在线观看免费高清完整版在线观看明 | 国产精品99久久久久久宅男 | 91最新在线视频 | 在线日韩一区 | 黄色毛片视频 | 国产免费观看久久黄 | 亚洲综合视频在线 | 91亚洲成人| 国产精品久久久久久久免费 | 天天天天天干 | 成人污视频在线观看 | 免费网站污 | 在线观看中文 | 在线小视频 | 在线亚洲免费视频 | 日韩综合第一页 | 91麻豆精品一区二区三区 | 国产vs久久| 日本在线观看黄色 | 久久色在线观看 | www.99久久.com| 亚洲天天摸日日摸天天欢 | 免费视频99 | 中文字幕人成乱码在线观看 | a电影免费看 | 伊色综合久久之综合久久 | 91福利视频久久久久 | 日韩精品视频在线免费观看 | 成人a免费看 | 免费观看一级视频 | 欧美日韩高清不卡 | 四虎影视成人永久免费观看亚洲欧美 | 国产午夜在线观看视频 | 日韩激情久久 | 欧美一级xxxx | 国产亚洲精品中文字幕 | 日韩成年视频 | 六月天综合网 | 一级性生活片 | 四虎免费在线观看 | 超级碰碰碰免费视频 | 国产精品久久久久999 | 国产精品视频你懂的 | 日韩丝袜在线观看 | 国产精品久久99综合免费观看尤物 | 日韩一区精品 | 国产精品免费视频观看 | 久久综合国产伦精品免费 | 成人毛片100免费观看 | av免费在线网 | 日韩欧美在线一区二区 | www免费看片com | 日本精品视频免费 | 一区免费观看 | 国产在线观看国语版免费 | 黄色成年 | 久久久久国产成人免费精品免费 | 国产视频美女 | 97在线观看视频国产 | 日韩网站在线免费观看 | 四虎影视精品 | 久久爽久久爽久久av东京爽 | 五月婷婷中文网 | 日韩高清精品免费观看 | 不卡的av电影在线观看 | 青青草华人在线视频 | 欧美国产视频在线 | 日本精品在线视频 | 人人澡人摸人人添学生av | 99热手机在线观看 | 在线观看视频一区二区 | 久久久久久久久久久久久久电影 | 六月婷操 | 国产精品3 | 国产伦精品一区二区三区在线 | 色婷婷综合在线 | 色中射 | 在线观看成人福利 | 免费91在线观看 | 亚洲天堂网在线视频 | 久草在线99 | japanesefreesex中国少妇 | 五月天久久综合网 | 久久久精品国产一区二区三区 | 国产精品不卡在线观看 | 国产亚洲精品久久网站 | 国产在线观看xxx | 就要色综合 | 国产亚洲日 | 国产精品九九九九九九 | 国产成人91 | 国产一级淫片在线观看 | 96精品视频 | 五月情婷婷 | 久草网免费 | .国产精品成人自产拍在线观看6 | 超碰国产在线播放 | 欧亚日韩精品一区二区在线 | 国产高清不卡一区二区三区 | 日操操 | 九色porny真实丨国产18 | 欧美色图88 | 国产不卡一区二区视频 | 国产夫妻av在线 | 久久伊人爱 | 欧美另类xxxxx | 狠狠色丁香九九婷婷综合五月 | 欧美一级免费黄色片 | 国产精品精品国产婷婷这里av | 精品在线观看一区二区 | 日韩精品一区在线播放 | 日韩精品不卡在线观看 | 韩日三级在线 | 久久免费a| 最近最新中文字幕 | 日韩二区三区在线观看 | 久久久久福利视频 | 色视频在线免费 | 色99网| 久久久精品在线观看 | 欧美在线观看小视频 | 成人久久免费视频 | 免费国产在线观看 | 九九综合九九综合 | 国产精品网站一区二区三区 | 亚洲精品福利在线 | 91视频免费看 | 97视频在线观看视频免费视频 | 国产精品毛片 | 四虎影视www | 国产精品一区二区三区在线看 | 国产成人精品一区二区三区 | 九色在线| 精品播放 | 成人国产精品一区二区 | 男女啪啪网站 | 久久人人添人人爽添人人88v | av九九 | www国产亚洲精品久久麻豆 | 婷婷激情综合五月天 | 亚洲h视频在线 | 国产精品色婷婷视频 | 欧美乱码精品一区 | 国产亚洲人 | 天天操天天摸天天干 | 免费亚洲婷婷 | 亚洲欧美国产日韩在线观看 | 色综合久久久久久久 | 国产精品毛片一区视频播 | 91av电影在线观看 | 九九激情视频 | 夜色资源网 | 国产精品久久久久一区二区 | 国产精品一区二区在线 | 欧美日韩免费一区二区 | 国产精品婷婷午夜在线观看 | 亚洲欧洲精品一区 | 亚洲日本一区二区在线 | 青青久草在线 | 日韩精品高清不卡 | 男女视频91 | 日韩久久精品一区二区三区下载 | 93久久精品日日躁夜夜躁欧美 | 激情五月婷婷综合 | 免费高清看电视网站 | 久久五月天婷婷 | 色在线最新 | 国产精品影音先锋 | 中文字幕丰满人伦在线 | 午夜美女wwww| 国产精品久久久久一区二区三区共 | 美女黄色网在线播放 | 亚洲aⅴ免费在线观看 | 久久综合狠狠综合久久狠狠色综合 | 91欧美精品| 国产日韩精品一区二区三区在线 | 欧美日韩一二三四区 | 日本午夜在线亚洲.国产 | 日本中文一区二区 | 中文字幕五区 | japanesexxx乱女另类 | 特级西西444www高清大视频 | 色国产在线 | 99精品在这里 | 午夜美女wwww| 91精品国产自产在线观看永久 | 国产日产精品一区二区三区四区的观看方式 | 国产精品福利av | 欧亚日韩精品一区二区在线 | 青青河边草免费直播 | av短片在线 | 天天干天天上 | 欧美一区在线观看视频 | 免费在线观看成人小视频 | 国产成人久 | 91人人人| av电影中文字幕 | 中文字幕在线观看视频一区二区三区 | 久插视频| 久久99精品波多结衣一区 | 欧美激情在线网站 | av福利超碰网站 | 久久精品二区 | 日本aaa在线观看 | 91视频91自拍 | 在线激情网 | 欧美日韩精品在线一区二区 | 最近久乱中文字幕 | 国产日产欧美在线观看 | 丁香激情综合 | 久久久久久99精品 | av中文天堂在线 | 911久久香蕉国产线看观看 | 国产在线观看av | 中文字幕二区在线观看 | 免费av大片 | 国产一区二区三区视频在线 | 国产精品永久久久久久久www | 亚洲精品xxx | 亚洲精品大片www | 天天色天天射综合网 | 久久久久久久久久久久国产精品 | 久久久久久麻豆 | 在线观看视频一区二区三区 | 99精品色 | 日韩综合视频在线观看 | a黄色大片 | 成人午夜黄色影院 | 国产黄在线免费观看 | 91影视成人 | 久久精品一区八戒影视 | 偷拍精品一区二区三区 | 欧美日韩精品国产 | 国产免费成人 | 免费日韩一区 | 欧美一级片免费播放 | 在线观看视频日韩 | 狠狠的操狠狠的干 | 国产福利电影网址 | 在线观看免费av片 | 成 人 黄 色 视频 免费观看 | 日韩手机视频 | 亚洲精品久久久蜜臀下载官网 | 日本韩国在线不卡 | 国内精品久久久久影院一蜜桃 | 久久久www成人免费毛片 | 99热国产在线中文 | 国产不卡在线看 | 中国黄色一级大片 | 免费a级大片 | 91传媒激情理伦片 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 在线观看av的网站 | 国产在线成人 | 日本中文字幕视频 | 中文字幕xxxx | 一区二区av | 亚洲国产精品传媒在线观看 | 91在线蜜桃臀 | 狠狠操天天操 | 国产又粗又猛又黄又爽视频 | 国产成人精品午夜在线播放 | 中文字幕在线视频精品 | 91视频免费看网站 | 欧美日韩精 | 丝袜足交在线 | 国产精品久久久久永久免费 | 夜夜视频资源 | 精品久久久99| 超黄视频网站 | 国语精品免费视频 | 久久久男人的天堂 | 国产成人精品一区二 | 欧美日产在线观看 | 国产色婷婷精品综合在线手机播放 | 在线观看黄色免费视频 | 国产香蕉视频在线播放 | 久久久久国产免费免费 | 在线观看欧美成人 | 日韩欧美xx | 奇米影视777四色米奇影院 | 五月天婷婷在线观看视频 | 欧美日韩二区在线 | 精品国产自在精品国产精野外直播 | 97色综合| 密桃av在线 | 亚洲毛片视频 | 国产一区二区在线观看视频 | 久久国产电影院 | 亚洲一区二区三区精品在线观看 | 日韩视频一 | 国产在线观看一 | 国产精品av免费观看 | 色 免费观看 | 欧美在线一级片 | 日韩精品2区 | 亚洲日本va在线观看 | 中文在线√天堂 | 中文字幕频道 | 天天草夜夜 | 亚洲九九九| 丁香婷婷色综合亚洲电影 | 97在线免费观看视频 | 久久久在线免费观看 | 亚洲成人资源在线 | 久久久蜜桃 | 久久这里只有精品23 | 日日夜夜狠狠操 | 在线观看国产www | 色在线免费 | 最近免费在线观看 | 欧美天堂视频在线 | 99在线精品免费视频九九视 | 六月久久婷婷 | 在线看黄色av | 97免费中文视频在线观看 | 日韩精品一区二区电影 | 麻豆国产网站入口 | 精品一区二区三区久久久 | 久久视频一区 | 最新av网址大全 | 亚洲欧美综合精品久久成人 | 亚洲va天堂va欧美ⅴa在线 | 久久天天躁夜夜躁狠狠躁2022 | 久久爽久久爽久久av东京爽 | 亚洲视频每日更新 | 国产99久久久精品视频 | 国产91电影在线观看 | 成人黄色小说在线观看 | 中文字幕视频一区二区 | 久久久亚洲电影 | 日本精品在线看 | 免费日韩一区二区 | 久久久999精品视频 国产美女免费观看 | 欧美国产日韩一区二区三区 | 午夜性色 | 色网站在线观看 | 色噜噜狠狠狠狠色综合 | 久久久久免费视频 | 一区二区中文字幕在线播放 | 韩国视频一区二区三区 | 五月天久久久久 | 成人三级av | 亚洲黄色片 | 伊香蕉大综综综合久久啪 | 狠狠狠狠狠狠 | 免费视频久久久久久久 | 欧美极品xxx | 麻豆传媒在线视频 | 午夜视频一区二区三区 | 欧美激情综合色 | 亚洲精区二区三区四区麻豆 | 日韩视频中文 | 天天要夜夜操 | 中文字幕免费高清av | 日韩视频www | 热re99久久精品国产66热 | 日韩最新在线视频 | 日韩精品在线视频 | 久久国产精品久久精品 | 国产精品99在线播放 | 99视频偷窥在线精品国自产拍 | 亚洲一区二区三区毛片 | 综合五月| 日韩国产欧美视频 | 国产在线a免费观看 | 久久国产一区二区三区 | 亚洲波多野结衣 | 亚洲免费小视频 | 国产日产在线观看 | 欧美日韩午夜在线 | 亚洲一区二区三区四区精品 | 国产视频首页 | 精品成人网 | 日日夜夜狠狠 | 在线观看免费黄视频 | 少妇18xxxx性xxxx片 | 久草精品国产 | 91麻豆精品久久久久久 | 五月婷婷一区 | 国内久久久久久 | 精品国产一区二区三区久久影院 | 五月婷婷色 | 一区二区网 | 久久综合久久久 | 视频在线亚洲 | 88av视频 | 亚洲欧美日韩精品久久久 | 色 免费观看 | 成片免费观看视频 | 国产亚洲精品久久久久久网站 | 天天色.com | 国产美女精品视频免费观看 | 日韩丝袜在线观看 | 国产一区福利 | 亚洲欧美成人 | 国产二区免费视频 | 久草在线99| 91精品黄色| 国产成人精品一区二区三区在线 | 久久爱导航 | 天天色天天操天天爽 | 337p日本大胆噜噜噜噜 | 99视频精品在线 | 免费看黄在线 | 精品96久久久久久中文字幕无 | av手机版 | 国产福利91精品张津瑜 | 色综合色综合久久综合频道88 | 日韩视频欧美视频 | 欧美日韩精品免费观看视频 | 999精品视频 | 国产成人精品国内自产拍免费看 | 91黄站| 制服丝袜在线91 | 伊人永久在线 | 日韩精品偷拍 | 日本在线观看一区二区三区 | 国产美女网站视频 | 一区二区三区在线免费观看视频 | 日韩在线资源 | 天天夜夜亚洲 | 99精品在线视频观看 | 在线国产小视频 | www.com在线观看| 久99久在线 | 久久久久国产成人精品亚洲午夜 | 亚洲 成人 欧美 | 久久99精品国产99久久6尤 | 久久夜视频 | 中文字幕资源网在线观看 | 狠狠操在线 | 黄色网在线免费观看 | 成年人免费看的视频 | 国产精品久久婷婷六月丁香 | 国产精品美女久久久久久免费 | 日韩视频一区二区三区在线播放免费观看 | 国产一区 在线播放 | 久久久免费 | 欧美一区二区三区特黄 | 国产午夜精品一区二区三区在线观看 | 在线天堂v| 亚洲精品视频在线观看视频 | 免费成人在线视频网站 | 伊人久久国产 | 午夜黄色 | 一区二区网 | 国产精品麻豆一区二区三区 | 国产精品99久久久久久小说 | 夜夜骑日日操 | 国产精品久久久久高潮 | 国产无套精品久久久久久 | 日韩免费视频观看 | 色五月成人 | 成人影片免费 | 全久久久久久久久久久电影 | 国产 一区二区三区 在线 | 亚洲资源| 精品成人a区在线观看 | 夜夜夜精品 | 欧美性生交大片免网 | 国产成人福利在线观看 | 婷婷色综合网 | 天天添夜夜操 | 手机av在线网站 | 欧美片一区二区三区 | 久久久久久久久久免费视频 | japanesexxx乱女另类 | 91网址在线看 | 亚洲播播 | 国产精品第72页 | 成人午夜电影在线 | 999精品视频 | 亚洲激情婷婷 | 日本最新中文字幕 | 国产在线观看黄 | 黄色av电影| 久久久久女教师免费一区 | 午夜精品一区二区三区可下载 | 7777精品伊人久久久大香线蕉 | 国产成人精品福利 | 日韩欧美视频在线播放 | 97超碰人人干 | 天天操天天射天天爽 | 国产亚洲免费的视频看 | 黄色国产在线观看 | 亚洲 综合 激情 | 探花视频在线观看+在线播放 | 天天操天天色天天射 | 97视频精品 | 婷婷丁香色综合狠狠色 | 日韩中文字幕在线观看 | 久久久久久久久久久久久国产精品 | 国产在线专区 | 中文字幕在线视频国产 | 久久精品爱爱视频 | 草久久久| 国产精品成人在线观看 | 五月婷婷av | 亚洲视频免费视频 | 久久看片网站 | 五月天综合激情网 | 五月婷婷激情网 | 免费观看国产精品视频 | 日韩精品久久一区二区三区 | 国产精品嫩草影院9 | 国产最新视频在线观看 | 91大神精品视频在线观看 | 国产区精品区 | 国产激情小视频在线观看 | 精品少妇一区二区三区在线 | 亚洲一区视频在线播放 | 国产精品va在线播放 | 国产精品久久久久久久免费观看 | 日韩二区在线 | 超碰在线个人 | 天天综合狠狠精品 | 97视频免费在线观看 | 欧美va天堂在线电影 | 日韩免费在线一区 | 亚洲码国产日韩欧美高潮在线播放 | 日韩在线观看三区 | 狠狠88综合久久久久综合网 | 国产69久久久欧美一级 | 中文字幕免费 | 中文字幕之中文字幕 | 一区二区三区在线免费播放 | 久久久久久美女 | 五月综合色婷婷 | 六月激情婷婷 | 亚洲国产免费网站 | 国产午夜亚洲精品 | 国产精品亚 | 色国产精品一区在线观看 | 97在线观视频免费观看 | 国产玖玖精品视频 | 香蕉蜜桃视频 | 久久久www成人免费毛片 | 国产精品福利午夜在线观看 | 91视频免费观看 | 久久久久久久久久福利 | 国产精品尤物视频 | 久久精品美女视频 | 婷婷色中文 | 在线 国产 亚洲 欧美 | 美女网站在线播放 |